张 涛
(乌鲁木齐铁路局 客票管理所,乌鲁木齐 830011)
PowerBuilder(简称PB)作为数据库应用开发的前端开发工具,在以铁路电子客票应用系统为代表的诸多应用系统开发中得到了广泛应用。数据窗口(DataWindow)作为PB开发工具的核心技术,通过提供丰富的控件属性和函数,控制数据窗口的显示和数据的操纵,但对数据窗口的打印支持似乎过于简单,尤其是对一些有特殊要求的打印控制, PB似乎显得不够完善。本文介绍PB数据窗口与Excel结合实现灵活打印报表的一种方法。
在一些应用中,尤其是在铁路站段有关台帐的应用中,需要对生产、管理过程中产生的数据进行汇总,形成日、月、季、年等相关的台帐记录,并打印成册。利用打印数据窗口的方法实现显得很不方便,因此,采用PB向Excel表单中传输数据,利用Excel的打印功能实现打印输出,既能方便用户使用,同时还可以将台帐保存成Excel表单,方便用户查询和资料保存归档。
实现步骤如下:
(1)定义变量
OLEobject myApp,mysub
(2)创建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)确定工作薄,同时工作薄中相应的单元格中写入数据
mysub=myApp.Application.ActiveWorkbook.Worksheets[1]
//确定第1个工作薄,同时向第1个工作薄中相应的单元格中写入数据
mysub.cells[5,2] = "测试数据1"
mysub.cells[6,2] = "测试数据2"
//确定第2个工作薄,从数据窗口中读入数据,循环写入Excel工作薄中相应的单元格
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表单中传输数据,用户可在Excel中操纵数据了。
注意:用户可先定制特定的Excel表单,并设定好表单单元格的属性,如字体大小、颜色、排列方式等,完成数据的传输后,在Excel中自动按设定好的属性进行显示;此外,要将程序打开的Excel文件另存,以免破坏了模版文件,对下一次数据传输造成麻烦。
PB数据窗口与Excel结合,通过定制特定的Excel表单,就可以实现对特殊要求的报表打印。本文提供的示例在乌鲁木齐铁路局的站段班组管理台帐软件系统中得到了较好的应用。
[1] 柯建勋. PowerBuilder 9.0进阶开发篇[M] . 北京:清华大学出版社,2003.