摘要 本文提出了Word模板的4種制作方法,并對每種方法的具體制作和使用進(jìn)行了詳細(xì)論述,最后比較了4種方法的優(yōu)缺點(diǎn)和適用場合,并提出了Word模板格式的保護(hù)方法。
關(guān)鍵詞 Word、模板、定位
Word不但具有無與倫比的圖文處理能力,同時也提供了Word層次結(jié)構(gòu)的對象,使用戶可以用VBA或者第三方軟件開發(fā)工具實(shí)現(xiàn)文檔自動化。COM技術(shù)的發(fā)展,使得客戶程序可以更方面容易的控制服務(wù)器程序。硬件速度的大幅提高,使原來制約COM執(zhí)行速度慢的瓶頸也已不復(fù)存在。因此,越來越多的軟件系統(tǒng)開始采用Word作為報(bào)表輸出工具,有的甚至將Word作為數(shù)據(jù)錄入工具。
但是,無論將Word作為報(bào)表輸出或者錄入工具,都涉及到Word中字符定位的問題。一般都是采用制作Word模板的方法來解決字符的定位。本文中所指的模板是一個體現(xiàn)用Word文檔,和Word中定義的.dot后綴形式的模板是有區(qū)別的。模板的制作共有特殊字符標(biāo)記法、書簽定義法、表格法和域定義4種方法,下面分別論述其制作方法和內(nèi)容識別技術(shù)、對其優(yōu)缺點(diǎn)進(jìn)行比較并對共性的問題提供解決辦法。以下程序示例都以Delphi語言為主,但對其他語言也同樣適用。
1 特殊字符標(biāo)記法
該方法是在模板中用不常見的特殊字符來表示需要替換的部分,例如符號<#Variable>,<# >是特殊字符,Variable是變量名字,用來區(qū)分不同的替換內(nèi)容。利用該方法制作好的Word模板,只能用來進(jìn)行寫操作,即將特殊字符和變量替換成具體的內(nèi)容。具體的替換示例如下:
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 := '特殊字符標(biāo)記法' ; //替換字符
with WordDocument1.Range.Find do
begin
execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl, ReplaceWith);
end;
示例中定義的各變量都是OleVariant類型的變量。以上只是針對一個特殊字符標(biāo)記進(jìn)行處理的例子。讀者可將本例予查詢字符中的“cgmc”換成變量,進(jìn)行循環(huán)查詢替換,也可以根據(jù)特殊字符<#>進(jìn)行遍歷查詢替換,且替換內(nèi)容不僅可以是字符,也可以是圖形,甚至可以是圖文混排的內(nèi)容。這可以通過剪貼板實(shí)現(xiàn)。
2 書簽定義法
書簽原本是作為瀏覽Word文檔時,快速返回原先查看處的一種方法。本文正是利用書簽的定位原理,對模板中的特定區(qū)域進(jìn)行識別。利用該方法制作模板的步驟如下:
(1)打開已定義的模板文檔,選中需要定義書簽的區(qū)域。
(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類型的變量,當(dāng)然也可以利用BookMarks集合的Count屬性對書簽進(jìn)行遍歷。利用書簽在文檔中輸出文本時,書簽位置上的原有內(nèi)容會被新內(nèi)容替換。
3 表格法
利用該方法制作的整個模板本身是由一個或多個表格構(gòu)成,具體讀寫內(nèi)容以單元格索引為依據(jù)進(jìn)行讀取。插入表格的具體步驟如下:
(1)在表格主菜單中選擇插入\表格。
(2)輸入列數(shù)和行數(shù),點(diǎn)擊確定。
(3)根據(jù)模板樣式合并或拆分單元格。
模板制作完成后,可根據(jù)需要將表格線進(jìn)行隱藏。單元格內(nèi)容的具體讀寫示例如下:
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類型變量。利用表格法制作模板時,可根據(jù)需要設(shè)置一個或多個表格。無論規(guī)則的二維Word表格還是不規(guī)則的表格,單元格索引號都遵循從左至右從上到下逐漸增加的順序,且每個表格的第一個單元格的索引號為1。
4 域定義法
該方法是利用Word中的域的定義來實(shí)現(xiàn)字符定位和內(nèi)容識別。首先定義模板的大體框架,然后在需要定義域的地方插入域。插入域的具體步驟如下:
(1)在插入主菜單中選擇域。
(2)選擇 “文檔自動化”類別。
(3)從域名中選擇“DocVariable”。
(4)利用DocVariabel的命名語法定義文檔中的域變量。
按Alt+F9可以顯示或隱藏域定義代碼。一個Word模板中可以定義多個域,多個域之間用變量名來區(qū)別。本例中的域定義在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種,詳細(xì)定義可在Delphi中的Word_Tlb.Pas中查閱。在使用域變量時,必須對域類型進(jìn)行判斷。以上所舉的例子中都是通過域的遍歷來實(shí)現(xiàn)指定位置文字的輸出和讀取,當(dāng)然也可以通過域變量的名字進(jìn)行域的識別。具體方法是利用域的Code屬性,提取域定義字符串,然后在域定義字符串中查找域變量。需要注意的是:給域賦值時,域中原有的文字不會被新值替換,只是在域中原有的文字后繼續(xù)添加。
以上4種方法,除特殊字符標(biāo)記法只能用做Word文檔生成之外,其余三種方法既能用作Word文檔生成,也能用作利用模板制作的Word文檔內(nèi)容的讀取。但是對于利用Word文檔作為系統(tǒng)手動錄入界面來講,書簽法很容易被用戶誤刪除,域定義法更是很難被用戶肉眼識別,且即使識別出來,手動錄入也很麻煩。在實(shí)際應(yīng)用中,表格法制作的模板文件一般來講格式相對穩(wěn)定,用戶除非有意,否則很難誤刪除。因此表格法制作的模板同其他三種方法相比,更能勝任制作錄入界面的工作。
模板文件歸根結(jié)底是一種具有特殊格式的Word文檔,因此很容易被人們修改格式。為了避免模板格式被破壞。可以為Word模板設(shè)置密碼,具體使用時,手動或用程序輸入密碼,用程序輸入密碼的方法為WordDoc.UnProtect,然后打開模板文件進(jìn)行操作。