Word文档自动化生成技术初探

2010-04-12 11:43李汝光
山西广播电视大学学报 2010年6期
关键词:章节选择题代码

□李汝光

( 镇江高等专科学校,江苏 镇江 212003)

随着社会信息化程度的提高,一些传统的由手工完成的工作逐渐转向由计算机来处理。本文提出了将存储在Access2003数据库中的数据自动生成特定格式的Word文档的方法,提高了工作效率。针对上述问题,分三个方面来讨论:Word对象模型、ADO技术连接Access2003数据库、Visual Basic6.0引用Microsoft Office 11.0 Object library实现Word文档生成。

一、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技术连接Access2003数据库

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对象后,就可以读取、插入、删除和更新其中的记录。这里就不赘述了。

三、Visual Basic6.0引用Microsoft Office 11.0 Object library实现Word文档生成

在编写《大学计算机信息技术习题集》一书中,习题量大,采用手工输入习题,如果需要增加或删除习题,则所有习题和答案的序号就要重新编号,费时费力。在实践中采用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.

猜你喜欢
章节选择题代码
单项选择题狂练
数列选择题精选精练
例说速解选择题的几种有效方法
高中数学章节易错点提前干预的策略研究
创世代码
创世代码
创世代码
创世代码
素养之下,美在引言——《“推理与证明”章节引言》一节比赛课的实录
十种妙招握在手 破解选择题无忧