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