马 健
(开滦一中,河北 开滦 063000)
基于OLE的报表打印方案设计与实现
马 健
(开滦一中,河北 开滦 063000)
文章针对VB6.0开发中遇到的复杂报表打印问题,提出了一种基于OLE中Excel自动化技术的解决方案。并首先描述了这种解决方案的理论基础,接着又以科研管理信息系统课题录制作功能的实现为例介绍了这种解决方案的具体实现。通过实际运行科研管理信息系统,验证了这种解决方案的可行性。
报表打印;OLE自动化;Excel
用Visual Basic开发应用程序时,难免会遇到打印复杂型报表的问题,这类报表一般具有复杂的表头,表格样式怪异,每行可能多条记录,有较复杂的计算公式,有大量的文本信息等特点。特别是在大中型管理信息系统的开发过程中这类报表的设计开发往往占据了开发总量的很大部分工作量。因此,找到一种高效、方便、通用的报表设计方法已迫在眉睫。为了解决上述问题,笔者对于这类报表打印功能的实现采用了OLE自动化技术,通过对Excel使用OLE自动化,可以在管理信息系统中创建任意外观的Excel报表。
OLE代表“对象连接与嵌入自动识别”,是一项用于实现和扩展动态数据交换的技术。利用OLE技术,在一个Windows应用程序中可以启动其它Windows应用程序,也可以显示和控制其它Windows应用程序的数据,并在创建数据的程序中对它进行编辑。OLE自动化是应用程序向支持OLE自动化功能的开发工具、宏语言等展示其OLE对象的一种工业标准,当一个应用程序支持OLE自动化时,它所具有的对象就可以用VB进行存取控制,通过激活对象上的方法或设置其属性来操纵对象。目前,除VB以外,支持OLE自动化的应用程序主要有Microsoft Word、Microsoft Excel等。
下面主要介绍VB所提供的可访问、处理Excel中的工作簿和工作表 VBA(Visual Basic for Application)对象,共包含四个对象:Application对象,Workbook对象,Worksheet对象,Range对象。下面对这四个对象及其所提供的属性和方法作简要说明。
所有程序都可以使用Application对象,从总体上讲,它是指应用程序,因此可以作为所有程序对象的容器。Application对象提供了很多属性和方法,所有程序都可以访问它们。
VBA允许创建、打开、保存、关闭和删除工作簿。使用Workbook对象,可以完成所有这些活动。在VBA对象层中,Workbook对象位于Application对象之下。
在VB中要创建新的工作簿,需使用Workbooks集合的Add方法。Add方法的语法如下:
Workbooks.Add([
这里
Worksheet对象提供了几个属性、方法和事件。可以使用他们完成一些活动。例如添加、删除和复制工作表。
使用Worksheet对象的Add方法,可以在工作部中插入新表。该方法的语法如下:
Worksheets.Add(
如果指定了
在VBA中,使用Range对象可以访问和引用工作表中的单元格。Range对象可以是一个单元格、行、列,也可以是单元格的选项。下面对Range对象的几个主要方法和属性作简要介绍。
(1)Range方法
Range方法可以识别单元格或范围。Range方法的语法如下:
Worksheet.Range(
Worksheet.Range(
在第一个语法中,
(2)Merge方法Merge方法可以合并指定范围。Merge方法的语法如下:Worksheet.Range(
(3)Font属性
可以利用Range对象的Font属性的属性来定义字体的大小和颜色。Font的属性包括 Bold、Color、Index、FontStytle等。
下面将以科研管理信息系统打印课题录功能的实现为例详细说明如何利用OLE自动化技术在VB中生成报表。方法是用VB的OLE自动化技术获取Excel的控制句柄,从而直接控制Excel的一系列操作,利用微软强大的电子表格工具Excel来实现复杂的报表。其步骤为:
(1)创建三个对象变量,类型分别为Excel.Application、Excel.Workbook和 Excel.Worksheet,分别对应将打开的Excel系统、工作簿和工作表;
(2)调用Excel使其显示在当前窗口中;
(3)对新的工作表命名;
(4)设计表格的外观;
(5)设置单元格内文字的字体、大小、显示位置等;
(6)用FOR-NEXT循环把MSFlexGrid中的记录逐一写入Excel单元格中;
(7) 画出表格轮廓线。
Private Sub Command6_Click()
Dim appexcel As New Excel.Application‘声明一个Application对象
Dim wbmybook As New Excel.Workbook ‘声明一个Workbook对象
Dim wsmysheet As New Excel.Worksheet‘声明一个Worksheet对象
appexcel.Visible = True‘调用Excel使其显示在当前窗口中
Set wbmybook = appexcel.Workbooks.Add‘创建新的工作簿
Set wsmysheet = appexcel.Worksheets.Add‘创建新的工作表
wsmysheet.Name = "查询结果"‘对新的工作表命名
wsmysheet.Cells(1, 2).ColumnWidth = 16‘设置单元格的列宽
wsmysheet.Cells(1, 1).RowHeight = 30‘设置单元格的行高
wsmysheet.Range("A1:F1").Merge‘合并单元格
wsmysheet.Range("A1:F10").WrapText = True‘设置单元格内文字可自动换行
‘设置单元格内文字顶行显示
wsmysheet.Range("A1:F10").VerticalAlignment =xlTop
‘设置单元格内文字居中显示
wsmysheet.Range("A1:F1").HorizontalAlignment =xlCenter
‘设置单元格内文字居左显示
wsmysheet.Range("A2:F10").Select
Selection.HorizontalAlignment = xlLeft
‘设置字体外观
wsmysheet.Range("A1:F1").Select
Selection.Font.FontStyle = "Bold"
Selection.Font.Size = 17
‘ 把MSFlexGrid3中的信息写到Excel中
For i = 0 To Form5.MSFlexGrid3.Rows - 1
For j = 0 To Form5.MSFlexGrid3.Cols - 1
wsmysheet.Cells(i + 1, j + 1) =Form5.MSFlexGrid3.TextMatrix(i, j)
Next j
Next I
‘画表格
wsmysheet.Range("A1", "F10").Borders.LineStyle =xlContinuous
End Sub
基于以上程序,可得到如图1的运行结果。
图1 运行结果
通过实际运行, OLE自动化技术对于科研管理信息系统打印课题录的功能的良好实现得到了充分验证。由于在科研管理信息系统复杂报表的开发过程中采用了 OLE自动化技术,不仅大大提高了整个系统的开发效率,而且显著增强了该部分程序的复用性和可读性。同时,用户可以随着需求的改变,利用Excel自身的强大功能对报表进行任意修改,从而提高了整个系统的灵活性。这种实现复杂报表打印的方法也可以推广到其它管理信息系统的开发中。但是OLE自动化技术实现的报表打印在运行速度上仍存在欠缺。
[1] 傅靖,李冬,罗刚君.Excel 2007 VBA开发技术大全[M].北京:电子工业出版社,2008.
[2] 巴威尔.F. VB.NET高级编程[M].北京:清华大学出版社,2002.
[3] 洛迈克斯.P. VB与VBA技术手册[M].北京:清华大学出版社,2002.
Method Design and of realization Report Print Based on OLE
s: This paper gives a method which base on Excel Automation to deal with some questions about complex report print. At first we give theory base of the resolving method. And then this paper give an example on the resolving method through the realization of the making tasks function in Scientific Research Management Information System.
Report print;OLE Automation ;Excel
TP319
A
1008-1151(2011)08-0033-02
2011-04-18
马健,男,开滦一中教师。