杨俊涛,李霆,孙全和
(五邑大学 机械工程学院,广东 江门 529020)
LabVIEW中基于ActiveX的复杂Word报表定制
杨俊涛,李霆,孙全和
(五邑大学 机械工程学院,广东 江门 529020)
为了生成复杂且不规则的测试报表,比较了LabVIEW生成报表的几种方法,提出利用ActiveX自动化技术生成Word报表.通过创建“属性节点”和“调用节点”的方法,自建“光标移动文本写入”子VI函数节点,实现了在word报表中光标的灵活移动和文本、图片的随意写入.
LabVIEW;ActiveX控件;Word报表
使用LabVIEW时,经常需要把测试条件、测试结果、各类图表等大量的测试数据同时汇总在一份报表中,以便于查询和对比.LabVIEW软件本身具有报表导出子VI,但它只能生成一些简单的报表,如需把上述各类测试数据整合在一份报表内,步骤繁琐且所生成的报表不美观,难以满足复杂报表的需求[1].ActiveX 是微软公司定义的用于Internet的一种对象链接与嵌入技术,通过ActiveX自动化服务器程序,能够对另一个应用程序中的对象进行操作[2].由于LabVIEW支持对ActiveX的调用,因此可利用ActiveX生成Word报表.文献[3]详细叙述了利用ActiveX生成Word报表的优势,并简要说明了文本、表格、图片插入的方法.文献[4]对生成Word报表的3种方法进行了分析探讨,并利用ActiveX技术在表格内写入测试数据.在LabVIEW中利用ActiveX生成Word报表已有系列研究,但对于在复杂不规则的模板内生成完整的Word报表的研究还比较少,尤其是在模板内随意写入大量的测试数据.对此,本文通过创建一个光标移动文本写入子VI,以实现光标的灵活移动和文本、图片的随意写入,进而在复杂且不规则的Word模板内随意生成预期的报表形式.
LabVIEW有多种生成报表的方法,如利用File I/O类、Report Generation类、Report Generation Toolkit、ActiveX等.
File I/O类生成的报表是ASCII格式的文本文件,简洁、速度快,但不能分段文字、绘制表格和插入图片,只能用在对格式要求不高的报表[5];Report Generation类生成的报表是LabVIEW的标准报表或HTML网页格式报表,美观且可绘制简单的表格和插入图片,但不适合制作样式复杂的报表,且生成的报表不易二次手动修改;Report Generation Toolkit是报表生成最方便的方法,但这种工具包未集成在LabVIEW中,必须单独购买且性价比低[6];LabVIEW支持ActiveX调用Word程序,可以很方便地生成复杂的报表,无论测试数据量多大、报表的结构多复杂,都可生成整齐美观的报表.利用ActiveX生成Word报表是最常用的一种方法.
通过ActiveX实现LabVIEW控制Word程序的原理是把一个程序作为客户端,另一个程序作为服务器端,两个程序间通过客户端调用服务器端提供的ActiveX对象实现信息共享,因此实现LabVIEW与Word通信,必须要知道Word的ActiveX对象,主要使用的几个对象如表1所示.
表1 Word中常用的对象
调用Selection下的Move Down/Up、 Move Left/Right可以实现光标上下左右移动,调用TypeText节点实现文本的写入.向表格的某一单元格内写入数据,需要调用一次Move节点,调用一次TypeText节点,费时且操作不便,若需要写入大量的测试数据,这种不便会更为明显,因此,需要创建一个光标移动文本写入子VI(如图1),使光标移动与文本写入集于一体,既可以控制“写入”与“移动”的先后顺序,同时又可以控制“右移”与“下移”的先后顺序.默认全为假,即先向右移动,再向下移动,最后写入文本,程序框图如图2.
图1 光标移动文本写入子VI
图2 光标移动文本写入子VI程序框图
通过ActiveX调用Word应用程序,才可以实现LabVIEW对Word的操作.具体流程为:
1)打开自动化服务器,获取自动化引用句柄:在程序框图中放置“打开自动化”节点,创建“自动化引用句柄”并在其上右击依次选择“选择ActiveX类”→“浏览…”→“Microsoft Word 12.0 Object Library Version 8.4”→“Application Word.Application.12”.
2)设置Documents属性节点:添加Visible元素并将其设置为可见.
3)调用Word模板:不使用Word模板,就会在空文档中生成报表,但很难生成复杂且不规则的报表;使用Word模板,可实现预期的报表形式.本文采用文献[7]的振动测试Word模板(如图3).
图3 Word模板
4)关闭自动化引用:结束对Word的访问.
Word模板打开之后,光标并不在模板表格内,还需要调用Selection的GoToNext元素,what处选择wdGoToTable,此时光标就会移动到表格内.利用创建的光标移动文本写入子VI,就可以实现对模板表格的操作.光标从一个单元格移动到下一个单元格,移动的步数为光标所在单元格的字符个数加1,如空字符时,移动一步就可进入下个单元格.转行符也是一个字符,右移转入下一行时,步数需加1.模板表格中有12处需要写入文本,可以在每一处的位置上插入书签,利用MS Office Report.vi直接写入文本.测试结果一般为数字型,转换为字符串后才能被Text接收,故使用“数值至小数字符串转换”节点,然后对生成的文本数组创建局部变量,最后与Text连接.对于规则表格内插入数据,尽量使用for 循环,本例利用for循环将一维文本数组写入到表格中.
LabVIEW软件常常需要将波形图、波形图表等导出在报表中.为此需要调用InlineShapes节点,其下元素FileName为文本格式,仅能接收字符串,为了将路径转换为字符串格式,需要调用“路径至字符串转换”函数节点.振动曲线波形图上右击依次选择“创建”→“调用节点”→“导出对象”,生成其调用节点,将BMP格式的图片存于某路径.详细程序框图如图4.
点击前面板上的“报表生成”控件,运行整个程序,便可自动生成一份复杂的Word报表(如图5).
图4 ActiveX生成Word报表程序框图
图5 最终的Word报表
在LabVIEW软件中,利用ActiveX技术可以方便地生成一份格式复杂、界面美观的Word报表.但对于复杂不规则的Word报表生成,不能利用for循环实现,需要时刻移动光标的位置,程序编程很繁琐,为了简化操作,创建的光标移动文本写入子VI可方便地向复杂且不规则的Word模板中写入测量数据,具有很强的灵活性与便利性.
[1] 刘闯.基于LabVIEW的报表生成[J].测控技术,2010,29(5): 102-103.
[2] 陈树学,刘萱.LabVIEW宝典[M].北京:电子工业出版社,2011: 281-282.
[3] 付志超,陈馨,张聪,等.LabVIEW中基于ActiveX的报表生成技术研究[J].船电技术应用研究,2010,30(4):60-63.
[4] 曲海山,龚明,封云.基于LabVIEW的Word报表生成方法[J].制导与引信,2013,34(1): 54-58.
[5] 张磊,王斌.LabVIEW报表生成技术在计量系统中的应用[J].计量技术,2005,25(3): 61-62.
[6] 刘允峰.基于LabVIEW8.5和ActiveX技术的报表生成[J].应用天地,2011,30(1): 64-66.
[7] 王刚.高速精密滚珠丝杠副综合性能测试系统开发[D].大连:大连理工大学,2012: 53-56.
[责任编辑:韦 韬]
Complex Word Report Customization Based on ActiveX in LabVIEW
YANG Jun-tao,LI Ting,SUN Quan-he
(School of Mechanical and Electrical Engineering,Wuyi University,Jiangmen 529020,China)
In order to generate complex and irregular test reports,the methods for generating LabVIEW reports are compared,and it is proposed to use ActiveX automation technology to generate Word reports.By creating “attribute nodes” and “invoke nodes”,a sub-VI function node of “cursor movement and text writing” is established to achieve the flexible movement of the cursor and the random inserting of texts and images
LabVIEW; ActiveX; Word reports
TP274
A
1006-7302(2016)01-0069-04
2015-10-22
杨俊涛(1987—),男,河北邯郸人,在读硕士生.主要从事机械振动与测试方面的研究;李霆,教授,博士,硕士生导师,通信作者,研究方向为振动分析与结构动态设计、智能信号处理与机械测试技术、动力学控制与仿真和机电一体化技术.