实现PB与PowerPoint的通讯
张 涛
PowerBuilder(以下简称PB)是一种优秀的数据库应用前端开发工具,PowerPoint则是微软公司Office办公系列工具中一个出色的幻灯片制作工具。如果能把PB应用程序(见图1)读取的数据动态制作成一张PowerPoint幻灯片(见图2),那么幻灯片中的报表就会随着数据库中信息的改变而改变。本文将描述如何利用OLE技术实现PB与PowerPoint的通讯。
VBA(Visual Basic for Application)是所有Office工具都支持的语言,OLE对象可以使用所有这些VBA命令来实现所需的功能,这样在PB程序中就可以通过OLE对象对PowerPoint进行控制了。如何将VBA语法转换成PB中的语法呢?看完下面的例子相信你就会明白了。
VBA语法:
Sub Macro1()
Selection.TypeParagraph
Selection.TypeText Text:="录入的内容"
Selection.Font.Bold = wdToggle
End Sub
相应的PB语法:
ole_object.Selection.TypeParagraph()
ole_object.Selection.TypeText("录入的内容")
ole_object.Selection.Font.Bold = 9999998
VBA中许多常量,PB是没有定义的,所以必须写上具体的数值,它可以在宏程序中加上一个消息框来显示,例如我们想得到wdToggle的具体值,可以在宏程序中加上:“MsgBox
wdToggle”执行该宏到该句时,就可以显示具体值了。

图1 PB程序界面
现在将具体描述如何将一个数据窗口中的所有数据写入一张幻灯片中:
1.定义并创建一个OLE对象
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject
2.连接OLE对象到PowerPoint
IF ole_object.ConnectToNewObject("PowerPoint.Application")
<> 0 THEN
MessageBox('OLE错误','OLE无法连接!')
return
END IF
ole_object.Visible = True

图2 在PowerPoint中生成的幻灯片
3.新建一个PowerPoint应用,并添加一张幻灯片
ole_object.Presentations.Add()
ole_object.ActivePresentation.
Slides.Add(1,ppLayoutBlank)
4.在第一张幻灯片上插入一张表格
long ll_colnum,ll_rownum
//得到数据窗口数据的列数与行数(行数应该是数据行数
+ 1)
ll_colnum = Long(dw_1.object.datawindow.column.count)
ll_rownum = dw_1.rowcount() + 1
ole_object.ActivePresentation.Slides(1).Shapes.AddTable(ll_rownum,ll_colnum,5,40,700,300)
5.读取数据窗口中的所有数据,输出到PowerPoint相应表格中
long i,j
string ls_value
//读取数据窗口的表头各列
string ls_colname
for i = 1 to ll_colnum
//得到标题头的名字
ls_colname = dw_1.describe('#' + string(i) + ".name") +
"_t"
ls_value = dw_1.describe(ls_colname + ".text")
ole_object.ActivePresentation.Slides(1).Shapes(1).Table.Cell(1,i).Shape.TextFrame.TextRange.Text
= ls_value
next
//读取所有数据到PowerPoint的相应表格中
dw_1.setredraw(false)
for i = 2 to ll_rownum
for j = 1 to ll_colnum
dw_1.scrolltorow(i - 1)
dw_1.setcolumn(j)
ls_value = dw_1.gettext()
ole_object.ActivePresentation.Slides(1).Shapes(1).Table.Cell(i,j).Shape.TextFrame.TextRange.Text
= ls_value
next
next
dw_1.setredraw(true)
6.保存新建的PowerPoint演示为sample.ppt
ole_object.ActivePresentation.SaveAs("C:\My Documents\sample.ppt")
7.断开OLE连接
Ole_Object.DisConnectObject()
Destroy Ole_Object
以上程序在Windows 98、PB 6.5、PowerPoint 2000环境下调试通过,本文例程可以在摆渡人工作室的下载特区中找到。