Word模板的制作方法和内容定位识别技术

转载 2007年09月17日 18:01:00

blueski推荐 [2006-11-1]
出处:计算机与信息技术
作者:刘金彪 曹海泉 姚国平
 

 

摘要  本文提出了Word模板的4种制作方法,并对每种方法的具体制作和使用进行了详细论述,最后比较了4种方法的优缺点和适用场合,并提出了Word模板格式的保护方法。
关键词  Word、模板、定位
 
Word不但具有无与伦比的图文处理能力,同时也提供了Word层次结构的对象,使用户可以用VBA或者第三方软件开发工具实现文档自动化。COM技术的发展,使得客户程序可以更方面容易的控制服务器程序。硬件速度的大幅提高,使原来制约COM执行速度慢的瓶颈也已不复存在。因此,越来越多的软件系统开始采用Word作为报表输出工具,有的甚至将Word作为数据录入工具。
但是,无论将Word作为报表输出或者录入工具,都涉及到Word中字符定位的问题。一般都是采用制作Word模板的方法来解决字符的定位。本文中所指的模板是一个体现用Word文档,和Word中定义的.dot后缀形式的模板是有区别的。模板的制作共有特殊字符标记法、书签定义法、表格法和域定义4种方法,下面分别论述其制作方法和内容识别技术、对其优缺点进行比较并对共性的问题提供解决办法。以下程序示例都以Delphi语言为主,但对其他语言也同样适用。
 
特殊字符标记法
该方法是在模板中用不常见的特殊字符来表示需要替换的部分,例如符号<#Variable>,<# >是特殊字符,Variable是变量名字,用来区分不同的替换内容。利用该方法制作好的Word模板,只能用来进行写操作,即将特殊字符和变量替换成具体的内容。具体的替换示例如下:
    FindText := '<#cgmc>'; //欲查询字符
    MatchCase := False;
    MatchWholeWord := True;
    MatchWildcards := False;
    MatchSoundsLike := False;
    MatchAllWordForms := False;
    Forward := True;
    Wrap := wdFindContinue; //是否查询下一个
    Format := False;
 
    Replace := True;
    MatchKashida:= false ;
    MatchDiacritics:= false ;
    MatchAlefHamza:= false ;
    MatchControl:= false ;
ReplaceWith := '特殊字符标记法' ; //替换字符
with WordDocument1.Range.Find do
begin
   execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl, ReplaceWith);
end;
示例中定义的各变量都是OleVariant类型的变量。以上只是针对一个特殊字符标记进行处理的例子。读者可将本例予查询字符中的“cgmc”换成变量,进行循环查询替换,也可以根据特殊字符<#>进行遍历查询替换,且替换内容不仅可以是字符,也可以是图形,甚至可以是图文混排的内容。这可以通过剪贴板实现。
 
书签定义法
书签原本是作为浏览Word文档时,快速返回原先查看处的一种方法。本文正是利用书签的定位原理,对模板中的特定区域进行识别。利用该方法制作模板的步骤如下:
(1)打开已定义的模板文档,选中需要定义书签的区域。
(2)在插入主菜单中选择书签。
(3)输入书签名选择添加。
一个文档中可定义多个不同的书签。书签定义完成后,在文档正文中不显示,但可以利用Word的书签菜单手动查找或利用代码查找。Word书签的定位及其读写操作示例如下:
tmp1 := wdGoToBookmark;
tmp2 := 'cgmc';
WordApp.Selection.GoTo_(tmp1,EmptyParam,EmptyParam,tmp2); //书签定位
Memo1.Lines.Add(WordApp.Selection.Text);//读操作
 
tmp1 := wdGoToBookmark;
tmp2 := 'cgmc';
WordApp.Selection.GoTo_(tmp1,EmptyParam,EmptyParam,tmp2); //书签定位
WordApp.Selection.TypeText('书签示例);//写操作
 
示例中tmp1,tmp2都是OleVariant类型的变量,当然也可以利用BookMarks集合的Count属性对书签进行遍历。利用书签在文档中输出文本时,书签位置上的原有内容会被新内容替换。
 
表格法
利用该方法制作的整个模板本身是由一个或多个表格构成,具体读写内容以单元格索引为依据进行读取。插入表格的具体步骤如下:
(1)在表格主菜单中选择插入/表格。
(2)输入列数和行数,点击确定。
(3)根据模板样式合并或拆分单元格。
模板制作完成后,可根据需要将表格线进行隐藏。单元格内容的具体读写示例如下:
 For i := 1 To WordDoc.Tables.Count do            //第 i 个表
 begin                                           
     for j := 1 To WordDoc.Tables.Item(i).Range.Cells.Count do  //第 j 个Cell
      begin
         myCell := WordDoc.Tables.Item(i).Range.Cells.Item(j);
          memo1.Lines.add(myCell.Range.Text); //读操作
       end;
  end;
 
 For i := 1 To WordDoc.Tables.Count do            //第 i 个表
 begin                                           
     for j := 1 To WordDoc.Tables.Item(i).Range.Cells.Count do  //第 j 个Cell
      begin
         myCell := WordDoc.Tables.Item(i).Range.Cells.Item(j);
          myCell.Range.Text := ‘表格示例’; //读操作
       end;
  end;
示例中myCell是Word2000的Cell类型变量。利用表格法制作模板时,可根据需要设置一个或多个表格。无论规则的二维Word表格还是不规则的表格,单元格索引号都遵循从左至右从上到下逐渐增加的顺序,且每个表格的第一个单元格的索引号为1。
 
4 域定义法
该方法是利用Word中的域的定义来实现字符定位和内容识别。首先定义模板的大体框架,然后在需要定义域的地方插入域。插入域的具体步骤如下:
(1)在插入主菜单中选择域。
(2)选择 “文档自动化”类别。
(3)从域名中选择“DocVariable”。
(4)利用DocVariabel的命名语法定义文档中的域变量。
按Alt+F9可以显示或隐藏域定义代码。一个Word模板中可以定义多个域,多个域之间用变量名来区别。本例中的域定义在Word模板的主体部分(即除了页眉和页脚)。其读写示例分别如下:
For i := 1 to WordDoc.Fields.Count do
begin
If WordDoc.Fields.Item(i).type_ = wdFieldDocVariable then
      WordDoc.Fields.Item(i).Result.Text := 'Word文档中域的使用';  //给域付值
end;
 
For i := 1 to WordDoc.Fields.Count do
begin
If WordDoc.Fields.Item(i).type_ = wdFieldDocVariable then
Memo1.Lines.Add(WordDoc.Fields.Item(i).Result.Text) : //读取所有DocVariable类型的域值
end;
Word文档中域的具体类型共有87种,详细定义可在Delphi中的Word_Tlb.Pas中查阅。在使用域变量时,必须对域类型进行判断。以上所举的例子中都是通过域的遍历来实现指定位置文字的输出和读取,当然也可以通过域变量的名字进行域的识别。具体方法是利用域的Code属性,提取域定义字符串,然后在域定义字符串中查找域变量。需要注意的是:给域赋值时,域中原有的文字不会被新值替换,只是在域中原有的文字后继续添加。
以上4种方法,除特殊字符标记法只能用做Word文档生成之外,其余三种方法既能用作Word文档生成,也能用作利用模板制作的Word文档内容的读取。但是对于利用Word文档作为系统手动录入界面来讲,书签法很容易被用户误删除,域定义法更是很难被用户肉眼识别,且即使识别出来,手动录入也很麻烦。在实际应用中,表格法制作的模板文件一般来讲格式相对稳定,用户除非有意,否则很难误删除。因此表格法制作的模板同其他三种方法相比,更能胜任制作录入界面的工作。
模板文件归根结底是一种具有特殊格式的Word文档,因此很容易被人们修改格式。为了避免模板格式被破坏。可以为Word模板设置密码,具体使用时,手动或用程序输入密码,用程序输入密码的方法为WordDoc.UnProtect,然后打开模板文件进行操作。
 

基于Java模板技术动态生成Word文档

一.使用word文档编辑好模版,如下图: 编辑好模板之后选择另存为,保存为xml格式。 二.编写java代码 采用的是FreeMarker模板引擎。需要下载对应的jar包,如果用的是Maven...
  • qq_32786873
  • qq_32786873
  • 2016年09月14日 11:31
  • 4802

JAVA 处理Word模板文件,替换其中的占位符

1.java处理word是个大大的坑,无论是poi还是Java2word 都不是尽善尽美。 2.poi只能进行简单读操作,Java2word需要调用系统的com接口,系统机必须安装office和动态...
  • u013542440
  • u013542440
  • 2015年09月22日 17:37
  • 3058

通过一个word模板来生成新的word并且填充内容

关于用Java编写生成word文档,动态添加数据到word文档的一些心得,经过翻阅了无数的有用的和无用的资料以后,总算找到了一种靠谱的方法 1.概述 经过反反复复的查阅资料,总算找到了一个靠谱的生...
  • u012438476
  • u012438476
  • 2017年03月21日 16:19
  • 2070

word论文中参考文献制作方法

Word中插入尾注的功能很好地解决了在论文中按顺序插入参考文献的问题,可以方便地进行增删和重新排序。 具体步骤如下: 1.光标移到要插入参考文献的地方,菜单中“插入”——“脚注和尾注”。 2...
  • u013677156
  • u013677156
  • 2014年11月26日 21:56
  • 655

Word代码片段制作方法

在编写word文档是经常要使用代码片段 如何自己的代码片段美观 如图: 设置步骤: 1,选择代码找到 边框设置为方框 底纹设置为 设置完成后可以将该样式设置为常用样式:...
  • ngvjai
  • ngvjai
  • 2012年12月14日 13:20
  • 1063

Word2013中带圈圈字符的制作方法

Word2013中新功能不少,当然也不能忘记老功能,今天我们要介绍的是带圈字符的输入,不会的朋友赶快擦亮眼睛,跟着小编学习一下! ①启动Word2013,单击开始--字体选项卡里面的带圈字符按钮...
  • sddsdl
  • sddsdl
  • 2017年11月22日 17:43
  • 39

WORD中表格制作方法

  • 2013年09月10日 14:45
  • 1.94MB
  • 下载

Word文档转PDF电子书 —— 制作方法

  • 2013年08月27日 22:25
  • 4.07MB
  • 下载

photoshops各种效果制作方法 WORD教程

  • 2010年03月02日 09:41
  • 9.06MB
  • 下载

discuz X2模板制作方法。

1、  通过网站后台,新建一套风格模板并导入替换“默认模板”(自己认为:这样比修改原来的默认页面更简单,原有页面比较多,部分功能短时间还不大清楚); 2、  根据页面内容的需要,编写CSS代码,使用...
  • cloudday
  • cloudday
  • 2011年10月29日 11:14
  • 5703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Word模板的制作方法和内容定位识别技术
举报原因:
原因补充:

(最多只允许输入30个字)