WORD试验报告的自动生成
金良锋,周文祥
(西南交通大学 牵引动力国家重点试验室,四川 成都 610031)
摘要:为规范、方便地生成各类试验报告,研究了利用Visual Basic语言编写的Word试验报自动生成软件,分析了此软件的优点和实现方法,重点介绍了对多表格、多图形的处理,以车轮外形试验报告自动生成系统为实例,验证了此方案的实用、有效性。
关键字:Word;VBA;报告;自动
中图分类号:TP311.11;TP391.1 文献标识码: A
AUTO GENERATION OF THE EXPERIMENT REPORT IN WORD FORM
JIN Liang-feng,ZHOU Wen-xiang
(Traction Power State Key Lab, Southwest Jiaotong University, Chengdu 610031, China)
Abstract:For creating test report normatively and expediently, studied the software of the auto-generating test report in Word form by Visual Basic language, analysed the advantage and the methods to achieve, importantly, presented the technique to deal with multi-forms and multi-graphics, confirmed the practicability and validity of the methods by the auto-generating test report system of the outline of the wheel.
Key words:Word;VBA;Report;Auto
0 引言
随着数字化技术的不断发展,各行各业每天都有大量的报告需要编制,而在大多数情况下仅仅是其中的数据、图表不同而已,如此周而复始的劳动,如果依靠人工通过计算机编辑表格、录入数据、绘制曲线,不仅劳动量巨大,而且容易出错。因此研究Word试验报告的自动生成具有重要的应用价值[1-7]。文献[1-5]分别利用Lab View 、Delphi vb语言代码大全网页、Visual C++、Power Builder等可视化编程语言,应用ActiveX自动化、OLE(对象的链接与嵌入)对象模型、Word邮件合并等工具对Word格式报告的生动生成做了相应的介绍,但由于需要调用大量的控件和底层函数,联机机制比较复杂,不容易推广。文献[6-7]描述了如何采用Visual Basic
语言将证书、报表的文本、数据自动录入到Word文档中,但没有深入应用Visual Basic语言对图形、图表的处理。
本文以Visual Basic编程语言为基础,以自动生成车轮外形试验报告为实例,结合文档的模板技术,巧妙运用Word软件的“域”和“宏”两个功能,应用VBA(Visual Basic for Applications)编程,实现了文本、表格、图形的自动处理,从而自动生成Word试验报告。
1 实现方法
规范的试验报告至少包括文本、表格、图形等三部分,为了使报告美观,不仅要合理地安排文本、表格、图形等之间的位置,还要对文本的字体、段落、边框、底纹等要做一定的设置,同时还要格式化表格、图形等等。因此,Word报告生成系统的核心工作在于对文字、表格、图形的自动化处理,尤其是多表格、多图形。报告生成系统的实现框架示意图如图1所示。
1.1 创建模板
为了避免反复输入相同的信息或作重复性的格式修改,我们引用了模板技术。创建一个自定
义的模板方法如下:新建一个空白Word文档,按照修改普通文档的方法,根据报告的需求,在文档中添加页眉页脚、标题、说明、文本框、分隔符等静态文本,在需要动态改变内容的位置插入书签、域。
例如,一般试验报告都包括试验时间,用户只须在文档中插入书签,在系统中用VBA代码在此书签处插入一个“日期和时间域”,报告中即可自动生成当前时间。如果报告需要插入表格,首先要设定好插入表格的段落,再在下一段插入“分页符”,使其成为一个区域;如果报告需要插入多组图形,在模板的适当地方插入文本框,对每个文本框进行大小等格式编辑,再在每个文本框内插入书签,并进行编号。
引用报告模板时,需打开对Microsoft Word 9.0 Object Library 的引用(对应类型库文件为Msword9.olb),以便可以引用Word类型库中的属性和方法。
1.2 表格处理
表格是试验报告的重要部分,但表格的内容具有动态变化性,主要表现在:(1)表的不固定性;(2)字段本身的可变性;(3)字段个数的可变性。这些因素给表格的自动生成造成
了很大的困难。目前,在VB中生成表格有三种方式:(1)使用VB的微软数据报表设计器,同数据源,如数据环境设计器,一起使用,可以从几个不同的相关表创建表格;(2)调用VB的“PictureBox控件”,将表格内容输出到“PictureBox控件”,然后再手工输出到打印机上;(3)通过VB应用VBA宏语言,将报表内容输出到Word文档中,通过Word应用程序或者直接使用VBA语句打印。考虑到试验报告的完整、可观性以及表格的动态性,我们选用第三种方式。
首先,读取报告需要的试验数据,将数据依次显示在“MSFlexGrid控件”的列表中,再引用模板,在相应的段落处选择一个区域,根据“MSFlexGrid控件”的行数和列数利用VBA语句创建表格,并将试验数据依次插入到表格中,然后对表格进行对齐方式、环绕方式、行列大小、单元格大小、边框底纹等属性的格式化处理。
如果字段本身字符较多,用宏语言将字段截取分行,并设定行列距和文字字体、大小、对齐方式等属性;如果字段个数较多,超出了文档范围,则用宏语言重新设定页边距、纸型、纵横向等页面设置属性。
1.3 图形处理
试验完成后,通常需要在试验报告中绘制出某些参数或特性的变化曲线。为解决这个问题,我们在做测量试验时将试验数据保存为*.txt或*.dat等文件格式,在报告生成系统中直接读取数据文件,调用“PictureBox控件”绘制出此文件对应的曲线,并将文件名显示在曲线上方,然后通过抓取屏幕的办法获取“PictureBox控件”区域,将其保存为*.bmp或者*.jpg等图片格式,并设定保存路径。对于多组曲线,将图片按数字序号依次保存,如:1.bmp,2.bmp等。然后引用模板的文本框,按照设定的路径将保存的图片复制到剪贴板上,调用书签,将图片按序号粘贴到文本框中。
1.4 报告输出
根据需要可以选择是否直接打印报告文档,若是,则显示“打印”对话框,从该对话框取得打印的页码值,只要计算机上连接有打印机即可直接打印出报告;否则,显示“保存”对话框,按照用户选择的路径和文件名将报告保存到某个文件夹中。
3 报告生成系统实例
3.1 实现框架
以车轮外形测量报告自动生成系统为例,根据报告生成系统的实现方法,此系统由5个部分组成:读取数据、文字处理、曲线处理、表格处理、报告输出。首先采用测量仪将车轮外形曲线数字化,并存储为*.txt文件。读取数据:到保存数据文件的文件夹,打开所有的*.txt文件,读取存储的数据,将各项性能指标参数显示到列表中。文字处理:对模板中的固定文本及插入的动态文本进行字体、大小等处理。曲线处理:根据需要,再次读取数据文件中的数据,绘制出车轮的外形曲线,并将曲线和对应的指标参数一起以*.bmp图片格式保存在报告中。表格处理:自动生成车轮的各种性能指标参数的表格,并自动对表格属性作格式化处理。
按照上述的实现框架,报告生成系统软件的算法流程图如图2所示。
3.2 主要代码
报告生成的一些比较重要的代码如下所示:
(1) 引用报告模板
''声明了一个Word应用程序,使Word 中的 Application 对象对自动功能有效
Dim Wapp As New Word.Application
''定义变量,代表Word的一篇文档
Dim Wdoc As Word.Document
''创建Word文档的一个引用,打开模板文件
Set Wdoc = Wapp.Documents.Open(App.path & "\记录模板.doc")
(2) 曲线图片保存
Dim num As String ''定义图片保存路径
Dim bmpnum As Integer ''定义图片编号
''设定图片保存路径
num = App.path & CStr(bmpnum) & ".bmp"
Set picGraph.Picture = CaptureClient(Me)
''抓取图片,picGraph为PpictureBox
SavePicture picGraph.Picture, num ''保存图片
Set picGraph.Picture = Nothing ''刷新图片
插入图片到模板文本框的部分代码如下:
For k = 1 To bmpnum ''打开所有保存过的图片
bq = "pic" & CStr(k) ''文本框的书签编号
bmpopen = App.path & CStr(k) & ".bmp" ''路径
Pic.Picture = LoadPicture(bmpopen) ''重新加载
Clipboard.Clear ''清空剪贴板
Clipboard.SetData Pic.Picture ''保存到剪贴板
Set wbook = Wdoc.Bookmarks(bq)
wbook.Select ''选中模板中文本框
Wapp.Selection.Paste ''插入到文本框内
Next k
(3) 表格生成
Dim myRange As Range ''定义一个Range对象
Dim myTable As Table ''定义一个表格
Dim RowCount As Integer ''表格行数目
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论