基于模版定制的报告自动生成方法
2017-01-11黄兵锋盛俏刘杰畅吴桐谭密
黄兵锋,盛俏,刘杰畅,吴桐,谭密
(1.湖北汽车工业学院 汽车动力传动与电子控制湖北省重点实验室,湖北 十堰 442002;2.东风汽车集团股份有限公司 技术中心,湖北 武汉 430056)
基于模版定制的报告自动生成方法
黄兵锋1,盛俏2,刘杰畅1,吴桐1,谭密1
(1.湖北汽车工业学院 汽车动力传动与电子控制湖北省重点实验室,湖北 十堰 442002;2.东风汽车集团股份有限公司 技术中心,湖北 武汉 430056)
Matlab软件以其强大的工程计算和仿真分析功能而得到广泛的应用。实际工作中,常常要在计算和分析之后生成报告,以输出计算结果、图形等。以企业平均油耗值计算报告的生成为例,通过微软组件对象模型(COM)及其接口技术,利用事先建立的报告模板使用“查找”和“替换”的方式插入数值和图形,在Matlab代码中实现了报告的自动生成。这种方法允许用户自定义不同的报告模版,不但简化了软件开发的难度,也提高了软件的灵活性和适应性。
自动生成报告;模版定制;组件对象模型;Matlab
在科学计算和工程仿真分析之后常常要生成报告,以输出计算结果、曲线图形等,例如,国家新近出台的乘用车企业平均燃料消耗量计算(CAFC),其计算结果应有一份翔实的报告,包括企业本年度CAFC值及未来几年的CAFC值预测,以及各不同燃料消耗档次车型(电动车、混合动力车、CNG、传统燃油车等)对企业整体CAFC值的影响。
Matlab软件以其强大的工程计算和仿真分析功能而得到广泛的应用,科研人员和工程师常常希望在计算或仿真结束时,能自动生成相应的分析报告。利用Matlab生成Word报告时,一般是以程序代码逐字逐句的创建、编辑文档内容并设置格式,且表格也是利用代码一笔一画绘制的。毫无疑问,这使得代码繁杂,灵活性较差,尤其是处理表格内容时特别繁琐。这种方式适用于报告格式固定的情况,当用户需要使用较多不同格式的报告(或自定义报告)时,将极大地增加软件编写、调试和维护的工作量[1]。也有人先利用代码产生XML格式报告,然后转存为Word格式的[2];但是建立XML格式的Word模板需要熟悉XML语法,并使用一些专用工具;且最终生成的报告需要在Word软件中手动另存为Word文档,比较麻烦。
鲁保玉、杨新芳在Delphi中使用Servers控件(Delphi专有)修改模板文件书签,从而实现了报告的自动生成[3]。但Matlab中没有相应的控件和方法,而且,利用Word模板中插入的书签实现定位,虽然方便了编程查找,但书签不够直观,不便于用户制定模板。有鉴于此,本文中以CAFC值计算报告的生成为例,直接使用Office COM,在Matlab中探索了一种基于模板库实现报告的自动生成方法:首先建立报告模版,然后利用查找、替换功能,将计算结果、图形插入模板中相应位置。模板的创建及其格式细节由用户自己实现,既避开了繁琐的格式处理工作,也提供了极大的灵活性。
1 基于模板的报告生成方法
仿真计算的报告,其格式一般比较固定,主要结构和文字内容基本上是不变的,只需要写入计算结果、插入曲线图形即可,有时可能需要加入一些“定性”的陈述结论的语句。因此,可以将报告的格式以Word模板的形式事先保存好,仿真计算结束后,把Matlab计算好的结果(数值、图形、字符串等)写到报告模板里即可。在模板文件中,不同的计算结果使用不同特征标记指示其位置(有时一个计算结果可能在报告中出现多次)。图1为汽车企业CAFC值计算软件的报告模板。
模板中特征标记应与其他文字内容区别开,这样修改的时候不会与正文中的用词混淆,可以加上一些特殊字符作为前缀或后缀;特征标记的设定方法可由程序员与用户协商,表1所示为图1中模板的若干特征标记的含义。图2为在软件中设定特征标记的界面。
图1 一种报告模板
表1 报告模板中特征标记示例
图2 特征标记的定义
由于微软公司并未公开Office文档的结构,对Office的访问和操作一般都是通过Office COM组件实现的(除了Java的PIO库,C#的NPIO库)。利用Matlab生成Word报告也只能使用与Word相关的COM组件及其接口。
2 汽车企业CAFC值计算软件报告自动生成
基于Matlab开发的汽车企业平均油耗值计算(CAFC)软件的报告为例,介绍自动生成报告的过程。打开模板文件“CAFC报告模板.doc”,建立Word软件的COM对象[1]。
2.1 插入数值计算结果
利用“搜索”、“替换”完成对模板中所有特征标记的替换工作。首先应设置查找条件,包括设置Selection.Text(查找的内容)为特征标记、设定查找的起始位置等。然后执行查找指令Selection.Find. Execute;如果查找结果不为空,将会自动选中查找到的特征标记,并且特征标记的整个字符串是处于被选中的状态;此时将Selection.Text赋值为要替换的数值,即可完成替换[4]。重复上述查找替换的过程,把模板中该特征标记的所有位置都换成数值。
按这种方法循环往复,把图3中所指定的5个特征标记全部替换完毕。替换后的内容,其字体和格式与之前的特征标记是一样的,用户只需设置好模板的字体格式即可。这种替换也可以完成表格中包含的特征标记的替换。所以,如果表格的行数、列数固定,也可以使用替换的方式简化制表工作,例如图2中第2个表格中的内容。若是表格的行数、列数随计算结果的长度而变,就只能利用Word COM组件的制表指令完成了,例如图3中第1个表格中各年份的3个CAFC计算结果。
2.2 插入图形
生成的报告中也可以插入软件计算得到的图形。下面是在报告中插入CAFC值计算软件绘制的曲线图的代码:
其中h_cafc为显示CAFC计算值的图像句柄。先利用print指令以Windows Enhanced Metafile格式将图形复制到剪贴板(指令clipboard(′copy′,data)只复制字符串或数值变量)[4-5],然后查找到代表图形位置的特征标记,并将该标记替换为剪贴板的内容(CAFC计算值的图像)。
2.3 保存报告
当所有的特征标记都已经被替换为软件计算的结果,就完成了报告内容,需将其保存。Word 97直至Word 2003版本使用的保存命令是SaveAs[5],而Word 2010后版本使用的是SaveAs2[6]。保存后应关闭文档,并退出Word服务器。
图3为根据上述代码生成的报告,在Win⁃dows7 x64和MATLAB 2014a x64上测试通过。
图3 基于图1所示模板生成的报告
3 模板库
若报告由几个部分组成,可以将每个部分单独做成模板,将各部分组合成一个完整的模板。同一个部分可以有多个模板,分别对应不同的排版格式和表述方式。例如,计算分析的结果,一般可以分为“好”、“一般”、“较差”等,因此可以为“结论”提供不同定型表述的模板,供用户选择。
在图4中显示了汽车企业CAFC值计算软件报告的组成部分,包括“题头”、“新能源汽车分析”、“CAFC分析”、“结论”,使用时可以从“模版”列选择不同的模板(模板存放在指定位置,软件将根据模板内的信息自动读取并识别);“备注”列出了该模板的一些解释说明。使用时可以以勾选的方式来决定是否将该部分内容插入报告中,也可以改变排序,实现了模板的高度定制。
图4 模板的组合
4 结束语
在使用COM技术生成报告的基础上提出了一种以Word格式报告模板为基础,采用“查找”和“替换”实现报告自动生成的方法;同时建立了模板库,适用不同需求。这种基于模板定制的报告生成方法,不但简化了软件开发的复杂性,也为用户自定义模板提供了一种有效的途径,适合自动生成各种不同需求的工程计算和仿真分析报告。
如果要生成其他格式(pdf文档)的报告,可以采用相关插件从Word格式的文档生成。Matlab提供了Notebook和Report Generator工具,但Notebook只能交互式编辑文档,适于手工编写嵌有MATLAB代码和运算结果的文档[7];Report Generator(包括Simulink Report Generator)则是用于项目分析展示的报表生成器,可以根据需要将操作代码和图标结果等以报表的形式输出[8]。这2种工具不适用于软件开发中生成报告。
[1]江泽林,刘维.实战MATLAB之文件与数据接口技术[M].北京:北京航空航天大学出版社,2014.
[2]郭策,马广焜,张志佳.毕业论文格式规范化处理系统的设计与实现[J].电脑开发与应用,2015,02:75-77+80.
[3]鲁保玉,杨新芳.用Delphi生成Word报告及动态结构表格[J].计算机应用与软件,2007(3):180-183.
[4]对象模型(Word VBA参考)[EB/OL].[2016-08-31]. https://msdn.microsoft.com/zh-cn/library/office/ff837519. aspx.
[5]Word 2007 Developer Reference[EB/OL].[2016-08-31].https://msdn.microsoft.com/en-us/library/bb244391 (v=office.12).aspx.
[6]Word 2010 Primary Interop Assembly Reference[EB/ OL].[2016-08-31].https://msdn.microsoft.com/en-us/ library/ff597928(v=office.14).aspx.
[7]张志涌,杨祖樱.MATLAB教程R2010a[M].北京:北京航空航天大学出版社,2010.
[8]MATLAB Report Generator,[EB/OL].[2016-08-31]. http://cn.mathworks.com/products/ML_reportgenerator/in⁃dex.html.
Approach to Automatic Generation Report Based on Template Customization
Huang Bingfeng1,Sheng Qiao2,Liu Jiechang1,Wu Tong1,Tan Mi1
(1.Hubei Key Laboratory of Automotive Power Train and Electronics,Hubei University of Automotive Technology, Shiyan 442002,China;2.Technical Center,Dongfeng Motor Corporation,Wuhan 430056,China)
Matlab is widely used for its powerful engineering calculation and simulation analysis func⁃tion.In practical work,it is often need to generate a report about the calculation and analysis,to output results,graphics,etc.Taking the CAFC report generation as an example,through Microsoft,s component object model(COM)and its interface technology,based on pre-established report templates,using“find”and“replace”function to insert numerical and graphical results,the report was automatically generated in Matlab code.The approach allows the user to customize different report templates,not only simplifies the difficulty of the software development,but also improves the flexibility and adaptability of the software.
automaticgeneration report;template customization;component object model(COM);Matlab
TP391.72
:A
:1008-5483(2016)04-0039-04
10.3969/j.issn.1008-5483.2016.04.009
2016-08-31
汽车零部件技术湖北省协同创新项目(2015XTZX04);湖北省教育厅指导项目(B201222306)
黄兵锋(1977-),男,湖北枝江人,博士生,从事汽车动力学方面的研究。E-mail:79871288@qq.com