黃兵鋒,盛俏,劉杰暢,吳桐,譚密
(1.湖北汽車工業(yè)學院 汽車動力傳動與電子控制湖北省重點實驗室,湖北 十堰 442002;2.東風汽車集團股份有限公司 技術中心,湖北 武漢 430056)
基于模版定制的報告自動生成方法
黃兵鋒1,盛俏2,劉杰暢1,吳桐1,譚密1
(1.湖北汽車工業(yè)學院 汽車動力傳動與電子控制湖北省重點實驗室,湖北 十堰 442002;2.東風汽車集團股份有限公司 技術中心,湖北 武漢 430056)
Matlab軟件以其強大的工程計算和仿真分析功能而得到廣泛的應用。實際工作中,常常要在計算和分析之后生成報告,以輸出計算結果、圖形等。以企業(yè)平均油耗值計算報告的生成為例,通過微軟組件對象模型(COM)及其接口技術,利用事先建立的報告模板使用“查找”和“替換”的方式插入數(shù)值和圖形,在Matlab代碼中實現(xiàn)了報告的自動生成。這種方法允許用戶自定義不同的報告模版,不但簡化了軟件開發(fā)的難度,也提高了軟件的靈活性和適應性。
自動生成報告;模版定制;組件對象模型;Matlab
在科學計算和工程仿真分析之后常常要生成報告,以輸出計算結果、曲線圖形等,例如,國家新近出臺的乘用車企業(yè)平均燃料消耗量計算(CAFC),其計算結果應有一份翔實的報告,包括企業(yè)本年度CAFC值及未來幾年的CAFC值預測,以及各不同燃料消耗檔次車型(電動車、混合動力車、CNG、傳統(tǒng)燃油車等)對企業(yè)整體CAFC值的影響。
Matlab軟件以其強大的工程計算和仿真分析功能而得到廣泛的應用,科研人員和工程師常常希望在計算或仿真結束時,能自動生成相應的分析報告。利用Matlab生成Word報告時,一般是以程序代碼逐字逐句的創(chuàng)建、編輯文檔內容并設置格式,且表格也是利用代碼一筆一畫繪制的。毫無疑問,這使得代碼繁雜,靈活性較差,尤其是處理表格內容時特別繁瑣。這種方式適用于報告格式固定的情況,當用戶需要使用較多不同格式的報告(或自定義報告)時,將極大地增加軟件編寫、調試和維護的工作量[1]。也有人先利用代碼產生XML格式報告,然后轉存為Word格式的[2];但是建立XML格式的Word模板需要熟悉XML語法,并使用一些專用工具;且最終生成的報告需要在Word軟件中手動另存為Word文檔,比較麻煩。
魯保玉、楊新芳在Delphi中使用Servers控件(Delphi專有)修改模板文件書簽,從而實現(xiàn)了報告的自動生成[3]。但Matlab中沒有相應的控件和方法,而且,利用Word模板中插入的書簽實現(xiàn)定位,雖然方便了編程查找,但書簽不夠直觀,不便于用戶制定模板。有鑒于此,本文中以CAFC值計算報告的生成為例,直接使用Office COM,在Matlab中探索了一種基于模板庫實現(xiàn)報告的自動生成方法:首先建立報告模版,然后利用查找、替換功能,將計算結果、圖形插入模板中相應位置。模板的創(chuàng)建及其格式細節(jié)由用戶自己實現(xiàn),既避開了繁瑣的格式處理工作,也提供了極大的靈活性。
仿真計算的報告,其格式一般比較固定,主要結構和文字內容基本上是不變的,只需要寫入計算結果、插入曲線圖形即可,有時可能需要加入一些“定性”的陳述結論的語句。因此,可以將報告的格式以Word模板的形式事先保存好,仿真計算結束后,把Matlab計算好的結果(數(shù)值、圖形、字符串等)寫到報告模板里即可。在模板文件中,不同的計算結果使用不同特征標記指示其位置(有時一個計算結果可能在報告中出現(xiàn)多次)。圖1為汽車企業(yè)CAFC值計算軟件的報告模板。
模板中特征標記應與其他文字內容區(qū)別開,這樣修改的時候不會與正文中的用詞混淆,可以加上一些特殊字符作為前綴或后綴;特征標記的設定方法可由程序員與用戶協(xié)商,表1所示為圖1中模板的若干特征標記的含義。圖2為在軟件中設定特征標記的界面。
圖1 一種報告模板
表1 報告模板中特征標記示例
圖2 特征標記的定義
由于微軟公司并未公開Office文檔的結構,對Office的訪問和操作一般都是通過Office COM組件實現(xiàn)的(除了Java的PIO庫,C#的NPIO庫)。利用Matlab生成Word報告也只能使用與Word相關的COM組件及其接口。
基于Matlab開發(fā)的汽車企業(yè)平均油耗值計算(CAFC)軟件的報告為例,介紹自動生成報告的過程。打開模板文件“CAFC報告模板.doc”,建立Word軟件的COM對象[1]。
2.1 插入數(shù)值計算結果
利用“搜索”、“替換”完成對模板中所有特征標記的替換工作。首先應設置查找條件,包括設置Selection.Text(查找的內容)為特征標記、設定查找的起始位置等。然后執(zhí)行查找指令Selection.Find. Execute;如果查找結果不為空,將會自動選中查找到的特征標記,并且特征標記的整個字符串是處于被選中的狀態(tài);此時將Selection.Text賦值為要替換的數(shù)值,即可完成替換[4]。重復上述查找替換的過程,把模板中該特征標記的所有位置都換成數(shù)值。
按這種方法循環(huán)往復,把圖3中所指定的5個特征標記全部替換完畢。替換后的內容,其字體和格式與之前的特征標記是一樣的,用戶只需設置好模板的字體格式即可。這種替換也可以完成表格中包含的特征標記的替換。所以,如果表格的行數(shù)、列數(shù)固定,也可以使用替換的方式簡化制表工作,例如圖2中第2個表格中的內容。若是表格的行數(shù)、列數(shù)隨計算結果的長度而變,就只能利用Word COM組件的制表指令完成了,例如圖3中第1個表格中各年份的3個CAFC計算結果。
2.2 插入圖形
生成的報告中也可以插入軟件計算得到的圖形。下面是在報告中插入CAFC值計算軟件繪制的曲線圖的代碼:
其中h_cafc為顯示CAFC計算值的圖像句柄。先利用print指令以Windows Enhanced Metafile格式將圖形復制到剪貼板(指令clipboard(′copy′,data)只復制字符串或數(shù)值變量)[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所示模板生成的報告
若報告由幾個部分組成,可以將每個部分單獨做成模板,將各部分組合成一個完整的模板。同一個部分可以有多個模板,分別對應不同的排版格式和表述方式。例如,計算分析的結果,一般可以分為“好”、“一般”、“較差”等,因此可以為“結論”提供不同定型表述的模板,供用戶選擇。
在圖4中顯示了汽車企業(yè)CAFC值計算軟件報告的組成部分,包括“題頭”、“新能源汽車分析”、“CAFC分析”、“結論”,使用時可以從“模版”列選擇不同的模板(模板存放在指定位置,軟件將根據模板內的信息自動讀取并識別);“備注”列出了該模板的一些解釋說明。使用時可以以勾選的方式來決定是否將該部分內容插入報告中,也可以改變排序,實現(xiàn)了模板的高度定制。
圖4 模板的組合
在使用COM技術生成報告的基礎上提出了一種以Word格式報告模板為基礎,采用“查找”和“替換”實現(xiàn)報告自動生成的方法;同時建立了模板庫,適用不同需求。這種基于模板定制的報告生成方法,不但簡化了軟件開發(fā)的復雜性,也為用戶自定義模板提供了一種有效的途徑,適合自動生成各種不同需求的工程計算和仿真分析報告。
如果要生成其他格式(pdf文檔)的報告,可以采用相關插件從Word格式的文檔生成。Matlab提供了Notebook和Report Generator工具,但Notebook只能交互式編輯文檔,適于手工編寫嵌有MATLAB代碼和運算結果的文檔[7];Report Generator(包括Simulink Report Generator)則是用于項目分析展示的報表生成器,可以根據需要將操作代碼和圖標結果等以報表的形式輸出[8]。這2種工具不適用于軟件開發(fā)中生成報告。
[1]江澤林,劉維.實戰(zhàn)MATLAB之文件與數(shù)據接口技術[M].北京:北京航空航天大學出版社,2014.
[2]郭策,馬廣焜,張志佳.畢業(yè)論文格式規(guī)范化處理系統(tǒng)的設計與實現(xiàn)[J].電腦開發(fā)與應用,2015,02:75-77+80.
[3]魯保玉,楊新芳.用Delphi生成Word報告及動態(tài)結構表格[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
汽車零部件技術湖北省協(xié)同創(chuàng)新項目(2015XTZX04);湖北省教育廳指導項目(B201222306)
黃兵鋒(1977-),男,湖北枝江人,博士生,從事汽車動力學方面的研究。E-mail:79871288@qq.com