LabVIEW中自带的报表工具包为我们提供了用于Word、Excel等报表操作的API,细心的小伙伴应该已经发现了报表工具包中的API基本都是生成、创建和写入报表这一类的,少有读取报表的API。
这是因为绝大多数需要报表操作的应用场景中都是按照测试流程和测试项生成测试报表,很少有需要从报表中读取的需求,那么如果碰到这样的应用场景我们应该如何使用LabVIEW读取报表中的内容?
本期小编就探索一下如何在LabVIEW中读取报表内容,快带上小伙伴一起来学习一下吧!
本文教程:
使用LabVIEW读取报表内容
一、软件环境
系统:Win10 64位 软件:LabVIEW2020 SP1 32bit、LabVIEW Report Generation工具包2020 32位、Office 2019 32位
二、 兼容软件版本说明
1. 关于LabVIEW版本和报表工具包版本选择
其实按照NI的一贯风格,使用同一个版本号的NI软件之间一般不会出现兼容性问题,需要注意的是这个工具包有64位和32位的区别,使用LabVIEW和工具包时注意版本对齐即可。 从LabVIEW2009开始报表工具包都会集成在LabVIEW的安装包中,当电脑中安装了Office后,安装LabVIEW时会默认勾选此工具包并安装,如果发现没有安装报表工具包,只需在官网下载对应版本补装即可。 下面是该工具包的下载链接和页面:https://www.ni.com/zh-cn/support/downloads/software-products/download.labview-report-generation-toolkit.html
2. 关于Office版本和报表工具包版本选择
同样需要注意的是Office的版本(32位/64位)要和报表生成工具包的版本对齐,并且32位和64位的报表生成工具包对Office的版本支持不同,比如2019的报表生成工具包32位支持Microsoft Office XP(32 Bit),而64位工具包就不支持。
NI在很早之前发布过说明文档《Report Generation Toolkit和Micriosoft Office的兼容性》,但是里面列举的版本比较老,新版本就只能在报表工具包的Readme中找到兼容性说明,小编在这里整理了一些32位版本之间的兼容性供大家参考:
三、 读取Excel报表内容1.读取带分隔符电子表格VI
利用LabVIEW文件IO中的“读取带分隔符电子表格”VI可以读取以分隔符分隔的Excel报表,下图为在LabVIEW中使用读取带分隔符电子表格VI读取Excel报表的示例:
2.读取文本文件使用文件I/O中的“读取文本文件”函数也可以直接读取以分隔符分隔的Excel报表,下图为在LabVIEW中使用“读取文本文件”函数读取Excel报表的示例:
3.Excel Get Data.VI
LabVIEW报表工具包中提供了一个读取Excel的VI,可以获取Excel报表中的单元格内容,缺点是该VI一次只能获取一个单元格中的数据,要使用这种方式读取报表的内容就必须要知道报表中表格究竟有几行几列,然后使用For循环轮询读取,这样执行效率会比较低;优点是相比于前面两种方法,它支持所有Excel报表格式,不拘泥于以分隔符分隔的报表格式。该VI如下图所示:
打开这个VI到底层可以看到它走的是ActiveX接口,相比于前两种方式,这种方式对大家来说可能会比较陌生一些,感兴趣的小伙伴可以尝试一下。使用该方式读取Excel报表代码如下图所示:
4.注意事项
使用前两种方式读取Excel报表都要求它是以制表符分隔的格式,如果是通过手动输入数据(不是使用LabVIEW的写入带分隔符电子表格VI)创建的Excel报表,则这两种方式都将无法正确读取Excel报表,大家会发现读取出来的是乱码。这时必须先将Excel报表保存为以制表符分隔的文本文件(.txt),然后读取该文本文件内容。而第三种方式没有格式限制,可以读取任意格式Excel报表中的内容。
这三种方式的区别在于使用“读取带分隔符电子表格”得到的是一个二维字符串数组,从逻辑上来说更接近于Excel中的格式 ,使用“读取文本文件”得到的是一段字符串数据,使用“Excel Get Data.VI”得到的是一个单元格的数据字符串。在实际应用的过程中根据自己的需求使用其中某种方式即可。
四、读取Word报表内容LabVIEW中内置于文件I/O的API可以操作多种数据文件,但都不能用来读取Word报表中的内容,而LabVIEW中提供了ActiveX接口供开发者们读取Word报表内容,下图是在LabVIEW中读取Word报表的代码示例:
这段代码理解起来并不是很不难,难的是找到“Word._Application”这个长得像静态引用的家伙,对于不熟悉ActiveX的开发者来说很难找到,在编写代码的过程中小编也遇到了一些问题,接下来和大家一起分享其中的内容~1.寻找神秘的“Word._Application”引用句柄其实要想找到这个引用有以下两种方法: 第一种是在LabVIEW自带的ActiveX工具包中(函数选板>>互联接口>>ActiveX)找到“打开自动化”函数接口,找到这个函数后在它的输入端“自动化引用句柄“右键创建一个常量,如下图所示:
注意此时创建出的句柄常量名称为“自动化引用句柄”,接下来需要右键该常量然后点击选择ActiveX类,将下拉列表拉至底部选择浏览,如下图所示:
然后在弹出窗口的“类型库”下拉列表中找到“Mricrosoft Word 16.0 Object Library Version 8.7”(不同版本的LabVIEW及报表工具包,版本号可能不同)如下图所示:
最后在“对象”选择框中选择Application(Word.Application.16),点击确定后就可以看到常量名已经变成了我们需要的“Word._Application”。 第二种方式就是在函数选板>>报表生成>>Word Specific>>Word Advanced找到“Word Get ActiveX Reference.VI”,将此VI拖到程序框图中,然后在“Word._Application”这个输出端创建一个常量即可。
2.关于错误Error-3005
小伙伴如果使用前面介绍的第一种寻找“Word._Application”的方法可以在第二步“选择ActiveX类”和最后一步选择“对象”时发现有“Word._Application”,如下图所示:
但是如果直接选这两处的引用,运行示例程序时会报错Error-3005,如下图所示:
该错误的原因是某些情况下,ActiveX对象的名称会改变。为了修正,所以必须重新插入ActiveX对象,而方法一中就相当于给它修正为重新插入的ActiveX对象了。下面,请大家看看使用这种方法读取Word报表文本内容的效果:
重点回顾:1、LabVIEW、报表工具包、Office要注意版本对齐为32bit或64bit;2、为了避免错误Error-3005,要插入修正后的ActiveX对象; 以上就是本期分享的所有内容啦,大家感兴趣的话可以自行创建VI试一试,如果有遗漏的地方欢迎各位小伙伴对我们提出建议和补充,华穗的工程师们始终欢迎大家和我们一起交流LabVIEW的编程知识与技巧!
对NI产品和软件开发知识感兴趣的工程师们,欢迎持续关注、留言和点赞,也可以私信小编各位的技术困惑和技术需求,以获取参加免费线下培训和技术交流的机会哦。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !