本文介紹一種在Power Builder(以下簡稱為PB)中利用OLE把數據庫中的數據傳送到Word文檔的方法通過這種方法用戶可以根據需求而改變內容以Word方式打印結果文檔例如在處理學生成績時如果要將每個學生的成績報告生成Word文檔不同的學生只改變姓名學號和年度等數據其他的格式不改變只要從學生成績數據庫中調出特定數據插入或替換到已經制作好的Word模版中即可解決問題
一創建Word模版文檔
Word模板文檔的創建根據用戶的要求進行在固定的內容輸入完成後將需要變換內容(例如姓名年度系別和證書編號等)的位置輸入student_namestudent_yeardepartment以及student_id等編碼注意: 盡量使用英文來表示這些變量目的是避免某些漢字相同而造成的誤替換
在需要動態改變內容的位置不需要輸入文字可以通過插入書簽的方法實現具體操作如下首先選擇在Word中選擇插入*書簽彈出書簽對話框(如圖所示)在書簽名文本框中輸入書簽名稱後點擊添加按鈕即在當前光標位置上增加了一個書簽假設我們增加了個書簽分別是 nameyeardepartment以及id分別代表姓名年度系別以及證書編號
二PB實現方法
在窗體中新建一OLE控件在彈出的insert object屬性窗口的create new tab選項卡中選擇Microsoft Word 文檔選項點擊OK按鈕後將該控件放在窗體中適當位置PB系統會自動出現Microsoft Word應用程序將控件命名為OLE_Word並創建打開文件替換數據和存盤按鈕編寫如下代碼
.打開文件
string docname named
integer value
value = getfileopenname(Select Filedocname named
DOCDoc Files (*DOC)*DOC)
if value = THEN
// 將模版文件另存為實際操作文件(程序略)
if ole_Wordopen(docname)= then
ole_Wordactivate(inplace!)
end if
end if
這裡使用GetFileOpenName函數讓用戶自行選擇文件實際應用時可以進行條件的限定注意: 需要將模版文件另存為實際操作文件後再打開不能直接操作模版文件打開文件參數有種其中inplace表示在PB程序內部窗口調用Word部分提供Word的功能菜單; 另一種參數是offsite表示PB程序外啟動Word應用程序提供Word的所有功能菜單簡單的演示文檔如圖所示
.插入或替換操作
()替換數據法
string ls_find_stringls_replace_string
//取數據庫中數據賦值變量ls_replace_string(程序略)
ls_find_string = student_name
ls_replace_string = 張某 ole_WordobjectapplicationSelectionfindExecute(ls_find_stringfalsetrue
falsefalsefalsetruetruels_replace_string)
//替換student_yeardepartmentstudent_id的程序與替換student_name相同略
其運行結果如圖所示
()插入數據法
除了使用查找替換方式您還可以使用書簽方式來實現上述操作
string ls_namels_yeardepartmentls_id
//取數據庫中數據賦值變量ls_namels_yeardepartmentls_id(程序略)
IF ole_WordobjectapplicationActiveDocumentBookmarksExists(name) THEN
ole_Wordobjectapplicationactivedocumentbookmarksitem(name)select
//定位書簽name
ole_Wordobjectapplicationselectiontypetext(ls_name)
//插入值
for i = to
//消除非法字符
ole_WordobjectapplicationSelectionTypeBackspace()
next
ELSE//錯誤提示
END IF
//定位書簽yeardepartmentid一樣略
注意事項:
.一定要判斷書簽是否存在如果書簽不存在進行以上操作將導致系統錯誤
.因為漢字雙字節問題PB 中每插入一個漢字後會在後面產生一非法字符需要判斷漢字個數來決定調用TypeBackspace()的次數上面涉及的次循環次數是舉例說明實際編程要使用變量替代
上面的種方法各有利弊插入數據方式設計思想簡單操作容易控制也比較方便但不適合多處插入同一內容並且需要刪除產生的非法字符; 而替換方式只調用一個函數可以搜索整個文檔替換同一內容並不產生非法字符但有可能替換掉不該替換的內容但是涉及的參數太多不易記住
.存盤
ole_Wordsave()
ole_Wordclear()
注: 上述代碼在Windows + Power builder 中測試通過
From:http://tw.wingwit.com/Article/program/SQL/201311/16393.html