□李汝光
( 镇江高等专科学校,江苏 镇江 212003)
随着社会信息化程度的提高,一些传统的由手工完成的工作逐渐转向由计算机来处理。本文提出了将存储在Access2003数据库中的数据自动生成特定格式的Word文档的方法,提高了工作效率。针对上述问题,分三个方面来讨论:Word对象模型、ADO技术连接Access2003数据库、Visual Basic6.0引用Microsoft Office 11.0 Object library实现Word文档生成。
Word的任何元素(如文档、表格、段落等)都可以用Visual Basic中的对象来代表。对象代表一个Word的元素,如文档、段落或表格。一个Word文档是由若干诸如段(Paragraph)、表(Table)等对象构成,在Word的高级版本中,都提供了利用VBA来控制Word的方法。Word文档中经常操作的对象主要有以下一些:
Application:代表Word应用程序。 ActiveDocument: 代表一篇活动文档。
PageSetup:代表页面设置描述。 Table:代表一个表格。
只要清楚了Word文档中对象的层次关系以及相关的对象属性,就可以非常方便的对Word文档进行控制。例如,要对一篇Word文档进行页面设置,上、下、左、右页边距设置为2,纸张大小设置为16开,可以通过工具→宏→录制新宏命令进行录制,录制完毕打开工具→宏→Visual Basic编辑器,观察上述操作的VBA脚本,如下所示。
With ActiveDocument.PageSetup ’当前活动文档的页面设置
.TopMargin=CentimetersToPoints(2) ’当前活动文档的上页边距
.BottomMargin=CentimetersToPoints(2) ’当前活动文档的下页边距
.LeftMargin=CentimetersToPoints(2) ’当前活动文档的左页边距
.RightMargin=CentimetersToPoints(2) ’当前活动文档的右页边距
.PageWidth=CentimetersToPoints(18.4) ’纸张宽度
.PageHeight=CentimetersToPoints(26) ’纸张高度
End With
ADO(ActiveX Data Objects)称为ActiveX数据对象,是Microsoft公司开发数据库应用程序面向对象的新接口,ADO技术已成为访问数据库应用程序的核心。ADO是DAO/RDO的后继产物,它扩展了DAO和RDO所使用的对象模型,具有更加简单,更加灵活的操作性能。ADO在Internet方案中使用最少的网络流量,并在前端和数据源之间使用最少的层数,提供了轻量、高性能的数据访问接口。下面简要介绍使用ADO对象访问Access2003数据库。要能正确引用ADO数据对象,应在Visual Basic集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框中选中“Microsoft ActiveX Data Objects 2.0 Library”或更高的版本选项来添加ADO数据对象类型库。ADO对象模型中二个主要的对象为Connection对象和Recordset对象。
1.Connection对象
要建立数据库连接,首先必须创建Connection对象实例。下述代码创建Connection对象实例,并打开一个连接:
Dim ans1 As New adodb.Connection
ans1.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库文件路径及文件名;Persist Security Info=False”
使用Connection对象的Close方法可以关闭与数据源的连接。
2. Recordset对象
要使用Recordset对象处理结果,首先必须创建Recordset对象实例。下述代码创建Recordset对象实例,并打开Recordset对象:
Dim rst As New adodb.Recordset
rst.open “表文件”,conn,2,3,3
使用Close方法关闭Recordset对象。打开Recordset对象后,就可以读取、插入、删除和更新其中的记录。这里就不赘述了。
在编写《大学计算机信息技术习题集》一书中,习题量大,采用手工输入习题,如果需要增加或删除习题,则所有习题和答案的序号就要重新编号,费时费力。在实践中采用VBA技术就可以实现习题的自动生成。为实现上述功能,首先要在Visual Basic6.0中分别引用Microsoft ActiveX Data Objects 2.0 Library”和“Microsoft Office 11.0 Object library”分别实现数据库的连接和Word文档的生成。下面具体说明:
《大学计算机信息技术习题集》分三种题型:是非题、单项选择题、填空题。单项选择题的关系模式为:选择题(章节号,知识点,试题,选项A,选项B,选项C,选项D,答案,是否图片,图片位置)。编写Visual Basic程序,首先建立和单项选择题表的连接,具体代码如下:
ans1.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:试题库建设db2.mdb;Persist Security Info=False” ’Data Source指数据库的路径和文件名
sq = “select 章节号,知识点,试题,选项A,选项B,选项C,选项D,是否图片,图片位置 from 选择题” & “ where left(章节号,1)=‘1’ order by 章节号,知识点, 试题”
rst1.Open sq, ans1, adOpenDynamic, adLockBatchOptimistic
rst1.MoveFirst ’记录移到第一条记录
上述代码把选择题按章节号分章节编排,每章再按知识点、内容有序编排,方便学生学习。试题的增、删、改在数据库中进行,编号可以自动重新编号,方便快捷。下面通过实例演示Word文档自动生成技术:
Set wdapp=CreateObject(“word.application”)’创建一个Word应用程序对象实例
Set wddoc=wdapp.Documents.Add ’创建一个Word文档对象实例
创建好Word文档对象实例后,下面的工作就是把表中的记录导出成Word文档,代码如下:
With wdapp
i = 1 ’设置自动编号的初始值
Do While Not rst1.EOF() ’遍历记录集中的所有记录
.Selection.TypeText Trim(Str(i)) +“、”+ Trim(rst1.Fields(2).Value) ’输出试题
.Selection.TypeParagraph
.Selection.TypeText “A、”+ Trim(rst1.Fields(3).Value) ’输出选项A
.Selection.TypeParagraph
选项B、C、D代码同选项A
rst1.MoveNext ’下移一条记录
i = i + 1 ’设置自动编号自动加1
Loop
习题的答案也可以自动生成,下面的代码演示用Word表格自动生成答案。具体代码如下:
sq =“select 章节号,知识点,试题,答案 from 选择题”&“where left(章节号,1)=‘1’order by 章节号, 知识点,试题” ’习题答案的记录集代码答案的输出采用每行10个答案,具体代码如下:
Do While Not rst.EOF()
.Selection.TypeText Trim(CStr(i)) ’输出试题编号
.Selection.MoveDown Unit:=wdLine, Count:=1 ’光标下移一行
.Selection.TypeText Trim(rst.Fields(3).Value) ’输出试题答案
If i Mod 10 <> 0 Then
.Selection.MoveUp Unit:=wdLine, Count:=1 ’光标上移一行
.Selection.MoveRight Unit:=wdCharacter, Count:=Len(Trim(CStr(i))) 光标右移编号指定的字符个数
Else '如果一行10个答案输完,光标要移到下一行的第一个单元格
.Selection.MoveDown Unit:=wdLine, Count:=1 ’光标下移一行
.Selection.MoveLeft Unit:=wdCharacter, Count:=9 ’光标左移到行首
End If
i = i + 1
rst.MoveNext
Loop
其它诸如插入页码、保存、打印的方法可通过录制宏,再到Visual Basic编辑器里粘贴相应的代码即可。
以上示例只是简单的介绍了用Visual Basic控制生成Word文档的方法,将Office文档的对象关系及属性搞清楚之后,可以非常方便地读取或设置Office文档中的所有对象的内容。不仅可以对Word进行程序控制, Office系统中的其它软件都可以用类似的方法进行控制,实现Excel自动化,PowerPoint自动化等。本例只要加上随机化算法亦可以实现试卷的自动生成。
参考文献:
[1]孙建国,牛又奇.新编Visual Basic程序设计教程[M].苏州:苏州大学出版社,2002.
[2]王克刚,齐军.Word文档的程序控制[J].安康师专学报,2002,(2).
[3]龚沛曾,陆慰民,杨志强.Visual Basic程序设计教程(6.0版)[M].北京:高等教育出版社,2003.
[4]李汝光,江卫星,黄力明.大学计算机信息技术习题集[M].南京:南京大学出版社,2010.