在PB中實(shí)現(xiàn)Word內(nèi)容的替換
導(dǎo)讀:本文介紹一種在Power Builder(以下簡(jiǎn)稱為PB)中利用OLE把數(shù)據(jù)庫(kù)中的數(shù)據(jù)傳送到Word文檔的方法。通過(guò)這種方法,用戶可以根據(jù)需求而改變內(nèi)容,以Word方式打印結(jié)果文檔。例如,在處理學(xué)生成績(jī)時(shí),如果要將每個(gè)學(xué)生的成績(jī)報(bào)告生成Word文檔,不同的學(xué)生只改變姓名、學(xué)號(hào)和年度等數(shù)據(jù),其他的格式不改變。只要從學(xué)生成績(jī)數(shù)據(jù)庫(kù)中調(diào)出特定數(shù)據(jù),插入或替換到已經(jīng)制作好的Word模版中,即可解決問(wèn)題??梢?jiàn)這樣就能很大程度上簡(jiǎn)便操作。下面就是實(shí)現(xiàn)WORD轉(zhuǎn)換的步驟。
一、創(chuàng)建Word模版文檔
Word模板文檔的創(chuàng)建根據(jù)用戶的要求進(jìn)行,在固定的內(nèi)容輸入完成后,將需要變換內(nèi)容(例如姓名、年度、系別和證書(shū)編號(hào)等)的位置輸入“student_name”、“student_year”、“department”以及“student_id”等編碼。注意: 盡量使用英文來(lái)表示這些變量,目的是避免某些漢字相同而造成的誤替換。
在需要?jiǎng)討B(tài)改變內(nèi)容的位置,不需要輸入文字,可以通過(guò)插入書(shū)簽的方法實(shí)現(xiàn),具體操作如下。首先,選擇在Word中,選擇“插入”*“書(shū)簽”,彈出“書(shū)簽”對(duì)話框(如圖1所示)。在“書(shū)簽名”文本框中輸入書(shū)簽名稱后,點(diǎn)擊“添加”按鈕,即在當(dāng)前光標(biāo)位置上增加了一個(gè)書(shū)簽。假設(shè)我們?cè)黾恿?個(gè)書(shū)簽,分別是 name、year、department以及id,分別代表姓名、年度、系別以及證書(shū)編號(hào)。
二、PB實(shí)現(xiàn)方法
在窗體中新建一OLE控件,在彈出的“insert object”屬性窗口的“create new tab”選項(xiàng)卡中選擇“Microsoft Word 文檔”選項(xiàng),點(diǎn)擊“OK”按鈕后將該控件放在窗體中適當(dāng)位置,PB系統(tǒng)會(huì)自動(dòng)出現(xiàn)Microsoft Word應(yīng)用程序。將控件命名為“OLE_Word”,并創(chuàng)建“打開(kāi)文件”、“替換數(shù)據(jù)”和“存盤”按鈕,編寫(xiě)如下代碼。
1.打開(kāi)文件
string docname, named
integer value
value = getfileopenname("Select File",docname, named,
"DOC","Doc Files (*.DOC),*.DOC")
if value = 1 THEN
// 將模版文件另存為實(shí)際操作文件(程序略)
if ole_Word.open(docname)=0 then
ole_Word.activate(inplace!)
end if
end if
這里使用“GetFileOpenName”函數(shù)讓用戶自行選擇文件,實(shí)際應(yīng)用時(shí)可以進(jìn)行條件的限定。注意: 需要將模版文件另存為實(shí)際操作文件后再打開(kāi),不能直接操作模版文件。打開(kāi)文件參數(shù)有2種,其中“inplace”表示在PB程序內(nèi)部窗口調(diào)用Word,部分提供Word的功能菜單; 另一種參數(shù)是“offsite”,表示PB程序外啟動(dòng)Word應(yīng)用程序,提供Word的所有功能菜單。簡(jiǎn)單的演示文檔如圖2所示。
2.插入或替換操作
(1)替換數(shù)據(jù)法
string ls_find_string,ls_replace_string
//取數(shù)據(jù)庫(kù)中數(shù)據(jù)賦值變量ls_replace_string(程序略)
ls_find_string = "student_name"
ls_replace_string = “張某” ole_Word.object.application.Selection.find.Execute(ls_find_string,false,true,
false,false,false,true,1,true,ls_replace_string,2)
//替換student_year,department,student_id的程序與替換student_name相同,略
其運(yùn)行結(jié)果如圖3所示。
(2)插入數(shù)據(jù)法
除了使用查找替換方式,您還可以使用書(shū)簽方式來(lái)實(shí)現(xiàn)上述操作。
string ls_name,ls_year,department,ls_id
//取數(shù)據(jù)庫(kù)中數(shù)據(jù)賦值變量ls_name,ls_year,department,ls_id(程序略)
IF ole_Word.object.application.ActiveDocument.Bookmarks.Exists(“name”) THEN
ole_Word.object.application.activedocument.bookmarks.item(“name”).select
//定位書(shū)簽name
ole_Word.object.application.selection.typetext(ls_name)
//插入值
for i = 1 to 10
//消除非法字符
ole_Word.object.application.Selection.TypeBackspace()
next
ELSE//錯(cuò)誤提示
END IF
//定位書(shū)簽year,department,id一樣,略
注意事項(xiàng):
1.一定要判斷書(shū)簽是否存在,如果書(shū)簽不存在,進(jìn)行以上操作將導(dǎo)致系統(tǒng)錯(cuò)誤。
2.因?yàn)闈h字雙字節(jié)問(wèn)題,PB 6.5中每插入一個(gè)漢字后會(huì)在后面產(chǎn)生一非法字符,需要判斷漢字個(gè)數(shù)來(lái)決定調(diào)用“TypeBackspace()”的次數(shù)。上面涉及的10次循環(huán)次數(shù)是舉例說(shuō)明,實(shí)際編程要使用變量替代。
上面的2種方法各有利弊,插入數(shù)據(jù)方式設(shè)計(jì)思想簡(jiǎn)單,操作容易,控制也比較方便,但不適合多處插入同一內(nèi)容,并且需要?jiǎng)h除產(chǎn)生的非法字符; 而替換方式只調(diào)用一個(gè)函數(shù),可以搜索整個(gè)文檔替換同一內(nèi)容,并不產(chǎn)生非法字符,但有可能替換掉不該替換的內(nèi)容,但是涉及的參數(shù)太多,不易記住。
3.存盤
ole_Word.save()
ole_Word.clear()
注: 上述代碼在Windows 98 + Power builder 6.5中測(cè)試通過(guò)
按照上文中介紹的步驟進(jìn)行操作,就能實(shí)現(xiàn)在PB中實(shí)現(xiàn)Word內(nèi)容的替換,給大家的工作帶來(lái)很多方便,希望上文中講到的內(nèi)容對(duì)大家能夠有所幫助。
【編輯推薦】
- WordPress的18條必備SQL操作語(yǔ)句
- PB內(nèi)置Oracle數(shù)據(jù)庫(kù)接口的使用方法
- PB應(yīng)用ODBC訪問(wèn)不同數(shù)據(jù)庫(kù)