張 濤
(烏魯木齊鐵路局 客票管理所,烏魯木齊 830011)
PowerBuilder(簡稱PB)作為數(shù)據(jù)庫應(yīng)用開發(fā)的前端開發(fā)工具,在以鐵路電子客票應(yīng)用系統(tǒng)為代表的諸多應(yīng)用系統(tǒng)開發(fā)中得到了廣泛應(yīng)用。數(shù)據(jù)窗口(DataWindow)作為PB開發(fā)工具的核心技術(shù),通過提供豐富的控件屬性和函數(shù),控制數(shù)據(jù)窗口的顯示和數(shù)據(jù)的操縱,但對數(shù)據(jù)窗口的打印支持似乎過于簡單,尤其是對一些有特殊要求的打印控制, PB似乎顯得不夠完善。本文介紹PB數(shù)據(jù)窗口與Excel結(jié)合實(shí)現(xiàn)靈活打印報表的一種方法。
在一些應(yīng)用中,尤其是在鐵路站段有關(guān)臺帳的應(yīng)用中,需要對生產(chǎn)、管理過程中產(chǎn)生的數(shù)據(jù)進(jìn)行匯總,形成日、月、季、年等相關(guān)的臺帳記錄,并打印成冊。利用打印數(shù)據(jù)窗口的方法實(shí)現(xiàn)顯得很不方便,因此,采用PB向Excel表單中傳輸數(shù)據(jù),利用Excel的打印功能實(shí)現(xiàn)打印輸出,既能方便用戶使用,同時還可以將臺帳保存成Excel表單,方便用戶查詢和資料保存歸檔。
實(shí)現(xiàn)步驟如下:
(1)定義變量
OLEobject myApp,mysub
(2)創(chuàng)建OLE對象
myApp=Create OLEObject
ret=myApp.ConnectToNewObject("Excel.Sheet")
if ret<0 then
messagebox("連接Excel程序失敗!",string(ret))
return
end if
(3)連接Excel,并檢驗返回值
myApp.Application.Workbooks.Open("C:ztzztz_mb0.xls")
//打開一個特定的Excel文件
myApp.Application.Visible=false
//使該Excel文件可視
(4)確定工作薄,同時工作薄中相應(yīng)的單元格中寫入數(shù)據(jù)
mysub=myApp.Application.ActiveWorkbook.Worksheets[1]
//確定第1個工作薄,同時向第1個工作薄中相應(yīng)的單元格中寫入數(shù)據(jù)
mysub.cells[5,2] = "測試數(shù)據(jù)1"
mysub.cells[6,2] = "測試數(shù)據(jù)2"
//確定第2個工作薄,從數(shù)據(jù)窗口中讀入數(shù)據(jù),循環(huán)寫入Excel工作薄中相應(yīng)的單元格
mysub=myApp.Application.ActiveWorkbook.Worksheets[2]
for r=1 to 5
mysub.cells[r+3,1] = dw_1.getitemstring(r,6)
mysub.cells[r+3,6] = dw_1.getitemstring(r,7)
next
(5)斷開連接
myApp.Application.Visible=true
myApp.DisConnectObject()
Destroy myApp
至此,完成了PB向Excel表單中傳輸數(shù)據(jù),用戶可在Excel中操縱數(shù)據(jù)了。
注意:用戶可先定制特定的Excel表單,并設(shè)定好表單單元格的屬性,如字體大小、顏色、排列方式等,完成數(shù)據(jù)的傳輸后,在Excel中自動按設(shè)定好的屬性進(jìn)行顯示;此外,要將程序打開的Excel文件另存,以免破壞了模版文件,對下一次數(shù)據(jù)傳輸造成麻煩。
PB數(shù)據(jù)窗口與Excel結(jié)合,通過定制特定的Excel表單,就可以實(shí)現(xiàn)對特殊要求的報表打印。本文提供的示例在烏魯木齊鐵路局的站段班組管理臺帳軟件系統(tǒng)中得到了較好的應(yīng)用。
[1] 柯建勛. PowerBuilder 9.0進(jìn)階開發(fā)篇[M] . 北京:清華大學(xué)出版社,2003.