Sunday, October 29, 2017

【WORD】LabVIEW如何读取Word文档


Title: How to read the MS Word documents by LabVIEW
        前不久,有一个测试软件所产生的测试报告全部是PDF格式。嗯,这已经不是第一次遇到PDF格式的测试报告了。客户紧急需要统计测试报告的数据,做一个数据分布图出来。而且还是下班后收到的请求,这事儿搞的有点大,至少有几百个PDF文件的数据要统计吧,如果纯人工抄录,然后再统计,这活可不容易啊――纯体力活啊。
        通常的话,无论是数据库还是Excel,文本txt或者Word格式的文档,都是可以通过软件写个脚本来实现自动化的,但是对于PDF来讲,还是有点困难的。PDF格式既是一种通用格式,但是又不具备可编辑性。短时间内完成这个脚本还是不容易的。目测了这个PDF格式的内容,有表格有图片有文字有数字,还是比较丰富的。而对于数据统计有意义的就是文字与数字。所以确定了方向:PDF先转化成Word,然后Word再转化为text,最后读取数据统计分析。

        PDF转Word,网络上有很多工具与服务,也收集了很多工具,有收费的也有免费的。这次选择了国产办公软件金山WPS,免费,而且支持批量转化,速度与质量都不错。
        
图1、就是这个工具,来自WPS,好歹也出自名门
图2、支持多文件一次性导入,操作方便,转换速度也不错,值得推荐
        几百个文件,几分钟就转换成一个个独立的同名Word文档,剩下的任务就是用LabVIEW来读取Word文档的内容了。

        整体上来讲,是使用了Microsoft ActiveX API函数。这里有一点惊喜的是,电脑没有安装微软的Office套件,只安装了金山WPS套件,还以为没有这些API函数,结果是WPS也兼容了MS的API,不需要安装MS的Office套件也能找到这些函数。(此处存疑,电脑确实没有安装MS Office,以前也没有安装过MS Office,但是API确实是可以用的。)

        
        使用LabVIEW的automation open打开MS的Word应用的引用,这里就是一个惊喜:并没有安装MS家的Office套件,只安装了WPS套件,居然也是完全兼容的。
        使用Documents属性节点访问文件,然后再通过Open方法节点打开指定的文件,这里有很多参数可选,比如编码、格式、密码等等,根据具体需要来设置。对于目前这个简单的文档,只需要设定好文件路径即可。
        通过文件属性节点访问内容Content (MSDN的描述:Returns a Range object that represents the main document story),当然当你用鼠标下拉后会发现,这里可以访问的东西很多很多哦,比如密码、打印设置、标题、表格、读写权限。。。多达几十项。我们这里只需要读取文本,就选择了Content属性节点。
        通过Range属性节点去访问文本text,就可以得到全部的文本内容。当然,这里也有很多其他节点可以尝试,可以读取到其他内容与参数。MSDN的描述:The Text property returns the plain, unformatted text of the range. When you set this property, the existing text in the range is replaced.
        在代码的最后面,就是对读取的文本进行了一些简单的处理,再进一步就可以导出到Excel里面做数据统计分析了。

        有几点说明:PDF转Word不是万能的,因为PDF本身是一种非常广泛的万能格式,不是所有的PDF都可以转化成有用的Word格式。另外,如果Word格式过于复杂,在使用API读取的时候需要格外小心,以免数据读取错误或丢失。

        延伸两点:LabVIEW也是可以生成丰富多彩的PDF格式报告的;也可以生成丰富多彩的Word/Excel格式报告的,也就是使用报告生成工具包RGT。

        API参考资料:https://msdn.microsoft.com/en-us/VBA/Word-VBA/articles/document-object-word

       有疑问可以联系support@itestgroup.com
       Any question for this post, please contact support@itestgroup.com more information click here

No comments:

Post a Comment