摘 要:隨著汽車檢測(cè)技術(shù)的發(fā)展,越來越多的汽車檢測(cè)報(bào)告隨之生成,但是這些檢測(cè)報(bào)告中的數(shù)據(jù)不易提取,無法對(duì)檢測(cè)數(shù)據(jù)的二次加工和分析。鑒于此,本文提出了一種基于VSTO的報(bào)告數(shù)據(jù)自動(dòng)化提取和報(bào)告生成的系統(tǒng)。首先,結(jié)合現(xiàn)有檢測(cè)報(bào)告設(shè)計(jì)Word數(shù)據(jù)自動(dòng)化提取模板。然后利用VSTO相關(guān)技術(shù)對(duì)Word進(jìn)行二次開發(fā),實(shí)現(xiàn)對(duì)模板數(shù)據(jù)的自動(dòng)化提取,并將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,便于對(duì)檢測(cè)數(shù)據(jù)進(jìn)行多維度的分析。同時(shí),系統(tǒng)可以根據(jù)數(shù)據(jù)庫中的數(shù)據(jù)生成相應(yīng)的檢測(cè)報(bào)告。
關(guān)鍵詞:Word;數(shù)據(jù)提??;報(bào)告生成;VSTO
中圖分類號(hào):TP317.2
Word是一種應(yīng)用廣泛的文字處理系統(tǒng),隨著汽車檢測(cè)行業(yè)的發(fā)展,越來越多的Word檢測(cè)文檔需要生成,然而這些檢測(cè)報(bào)告格式不統(tǒng)一,存在文檔管理混亂、數(shù)據(jù)提取困難、數(shù)據(jù)查詢不便、數(shù)據(jù)無法進(jìn)行二次加工和分析等問題。本文利用VBA(Visual Basic For Application)和VSTO(Visual Studio Tools for Office)相關(guān)技術(shù),對(duì)Word2010進(jìn)行二次開發(fā),通過定制Word文檔模板和Word外接程序的開發(fā),對(duì)Word輸入數(shù)據(jù)有效性的驗(yàn)證、Word數(shù)據(jù)自動(dòng)化提取以及Word檢測(cè)報(bào)告的生成。實(shí)現(xiàn)了檢測(cè)報(bào)告統(tǒng)一、集成管理,便于對(duì)檢測(cè)報(bào)告數(shù)據(jù)進(jìn)行分析,挖據(jù)數(shù)據(jù)背后潛在的應(yīng)用價(jià)值。
1 系統(tǒng)的總體框架設(shè)計(jì)
系統(tǒng)選用Microsoft Visual Studio 2010作為主要開發(fā)平臺(tái),選用C#為編程語言對(duì)微軟的Word 2010軟件進(jìn)行定制,同時(shí)借助Word內(nèi)嵌的VBA對(duì)數(shù)據(jù)有效性進(jìn)行驗(yàn)證。系統(tǒng)的總體框圖如圖1所示,分為三部分,第一部分Word報(bào)告信息的自動(dòng)化提取,該部分首先對(duì)現(xiàn)有報(bào)告進(jìn)行分析,然后進(jìn)行Word模板的設(shè)計(jì)以及外接程序的開發(fā),實(shí)現(xiàn)數(shù)據(jù)自動(dòng)化提取。第二部分是數(shù)據(jù)庫的設(shè)計(jì),本系統(tǒng)的數(shù)據(jù)庫一方面是存儲(chǔ)Word文檔提取的數(shù)據(jù),另一方面為Word報(bào)告的生成提供數(shù)據(jù)來源。第三部分是檢測(cè)報(bào)告的生成,根據(jù)數(shù)據(jù)庫中的數(shù)據(jù)和檢測(cè)報(bào)告模板,生成相應(yīng)的檢測(cè)報(bào)告。
2 Word二次開發(fā)技術(shù)分析
軟件二次開發(fā),主要指的是對(duì)現(xiàn)有的某個(gè)軟件進(jìn)行功能擴(kuò)展、定制,用戶根據(jù)自身需求在該軟件平臺(tái)上進(jìn)行第二次有針對(duì)性的開發(fā),一般來說都不會(huì)改變軟件原有的內(nèi)核。Word二次開發(fā),即是對(duì)Word辦公軟件進(jìn)行二次開發(fā),主要的技術(shù)是VBA和VSTO。
VBA是一種完全面向?qū)ο篌w系結(jié)構(gòu)的編程語言,Word辦公軟件內(nèi)嵌了VBA,為用戶提供Word應(yīng)用中的自定義功能。在Word 2010版本中,在開發(fā)工具菜單欄中,可以實(shí)現(xiàn)對(duì)宏的基本操作,如錄制、編輯和運(yùn)行宏等。
VSTO對(duì)Word二次開發(fā)是一種全新的跨越,它基于Visual Studio開發(fā)平臺(tái),將Word文檔或程序作為對(duì)象進(jìn)行定制。在Visual Studio中,可以對(duì)常用Office組件進(jìn)行文檔和外接程序的開發(fā)。
3 數(shù)據(jù)自動(dòng)化提取
數(shù)據(jù)自動(dòng)化提取模塊是系統(tǒng)的核心模塊,包括Word模板的定制和數(shù)據(jù)自動(dòng)化提取程序的開發(fā)。其中模板定制使Word文檔格式統(tǒng)一,確保模板填寫數(shù)據(jù)的規(guī)范性和有效性。數(shù)據(jù)自動(dòng)化提取程序根據(jù)需要從模板的特定位置上提取出數(shù)據(jù)。
3.1 Word模板的設(shè)計(jì)
Word模板設(shè)計(jì)的好壞關(guān)系到后續(xù)功能的實(shí)現(xiàn),因?yàn)閿?shù)據(jù)自動(dòng)化提取和檢測(cè)報(bào)告的生成,都是以模板為依托。Word模板的設(shè)計(jì)在現(xiàn)有檢測(cè)報(bào)告的基礎(chǔ)上完成的,它主要分為以下幾個(gè)步驟:
(1)分析現(xiàn)有的檢測(cè)報(bào)告,確定報(bào)告中那個(gè)位置上的數(shù)據(jù)需要被提取,然后用符號(hào)進(jìn)行標(biāo)記,如{R_001}、{R_002}等。
(2)將文檔保存為XML格式的文檔,然后用正則表達(dá)式相關(guān)技術(shù)對(duì)XML格式文檔中的特殊標(biāo)記位置進(jìn)行替換,使相應(yīng)的位置轉(zhuǎn)換為書簽,后續(xù)文檔錄入實(shí)際上是對(duì)書簽文字進(jìn)行編輯。
(3)將上一步驟的XML文件轉(zhuǎn)換為Doc文件,然后在利用VSTO的Word文檔定制功能,對(duì)Doc模板增加相應(yīng)控件,如時(shí)間控件、圖片控件以及數(shù)據(jù)校驗(yàn)按鈕。
(4)對(duì)特定要求的數(shù)據(jù)需要進(jìn)行校驗(yàn),采用Office內(nèi)置的VBA編程技術(shù)對(duì)數(shù)據(jù)的有效性進(jìn)行校驗(yàn),校驗(yàn)的流程如圖2所示。
3.2 數(shù)據(jù)自動(dòng)化提取程序設(shè)計(jì)
數(shù)據(jù)自動(dòng)化提取程序是對(duì)設(shè)計(jì)模板上固定位置上的數(shù)據(jù)進(jìn)行提取,是對(duì)Word程序功能的定制,在Word原有菜單欄項(xiàng)增加數(shù)據(jù)提取菜單欄,這里用到VSTO的外接程序的開發(fā)。為了降低程序的耦合性,提高代碼的重用性,程序在開發(fā)過程中采用了基于MVC三層架構(gòu)設(shè)計(jì),包括模型層、視圖層、邏輯控制層,其中模型層是對(duì)Word底層模型進(jìn)行重新組合與設(shè)計(jì)。邏輯控制層主要是對(duì)數(shù)據(jù)提取的邏輯模塊功能進(jìn)行劃分,包括用戶管理模塊、數(shù)據(jù)提取模塊、數(shù)據(jù)上傳模塊。表示層主要是界面展示。
對(duì)于文字格式的信息可以直接根據(jù)位置進(jìn)行提取,而對(duì)于圖片格式的數(shù)據(jù),需要進(jìn)行轉(zhuǎn)換,因?yàn)樵赪ord中圖片采用的是Base64的編碼格式,要想對(duì)Word中的圖片數(shù)據(jù)進(jìn)行提取,首先要查找定位圖片對(duì)應(yīng)的Base64編碼,然后將Base64編碼進(jìn)行解碼轉(zhuǎn)換為圖片格式。主要代碼如下:
//將Base64編碼轉(zhuǎn)化為字節(jié)
Byte[] arr=convernt.FromBase64String(str);
//將字節(jié)保存到內(nèi)存流
MemoryStream ms = new MemoryStream(arr);
//轉(zhuǎn)化為Bitmap對(duì)象
Bitmap bmp = new Bitmap(ms);
//保存圖片
bmp.Save(txtFileName+\".jpg\",ImageFormat.Jpeg);
4 報(bào)告自動(dòng)生成
目前汽車行業(yè)檢測(cè)機(jī)構(gòu)的專家在查看檢測(cè)報(bào)告時(shí),往往要經(jīng)過很多流程,如向檢測(cè)人員提出申請(qǐng),申請(qǐng)通過后通過郵件或者其它方式接受檢測(cè)結(jié)果,這種方式不僅流程繁瑣、操作不便,而且檢測(cè)報(bào)告也不便管理。通過報(bào)告自動(dòng)生成技術(shù)可有效的解決上述問題,實(shí)現(xiàn)檢測(cè)報(bào)告的統(tǒng)一化、一站式的管理。
報(bào)告生成的流程如圖3所示,首先根據(jù)用戶選擇檢測(cè)報(bào)告生成的方式,按照時(shí)間順序或者用戶生成檢測(cè)報(bào)告,然后選擇報(bào)告編號(hào)和報(bào)告模板進(jìn)行數(shù)據(jù)填充,并對(duì)錯(cuò)誤信息進(jìn)行提示。
5 總結(jié)
本文設(shè)計(jì)了基于VSTO的Word數(shù)據(jù)自動(dòng)化提取及報(bào)告生成的系統(tǒng),實(shí)現(xiàn)了Word 文檔的數(shù)據(jù)自動(dòng)、準(zhǔn)確、規(guī)范采集及報(bào)告實(shí)時(shí)生成,實(shí)現(xiàn)了檢測(cè)報(bào)告數(shù)據(jù)統(tǒng)一化、規(guī)范化管理。
參考文獻(xiàn):
[1]葉明,張錚.基于C.NET的Word報(bào)告生成功能開發(fā)[J].計(jì)算機(jī)工程與應(yīng)用,2008,44(9):104-106.
[2]魯保玉,楊新芳.用Delphi生成Word報(bào)告及動(dòng)態(tài)結(jié)構(gòu)表格[J].計(jì)算機(jī)軟件與應(yīng)用,2007,4(3):180-183.
[3]王二暖.基于C#的Word2010文檔自動(dòng)生成系統(tǒng)[J].電腦開發(fā)與應(yīng)用,2011,05.
[4]羅許練.基于C#.NET的動(dòng)態(tài)Word文檔生成及數(shù)據(jù)填充研究[J].惠州學(xué)院學(xué)報(bào),2009,6(29).
[5]閆新珠,王秀芹.在VC中利用Word生成測(cè)量報(bào)告[J].地礦測(cè)繪,2006,22(1):32-33.
作者簡(jiǎn)介:惠怡靜(1975-),女,天津人,副主任,工程師,學(xué)士學(xué)位,研究方向:汽車行業(yè)信息平臺(tái)建設(shè)、汽車行業(yè)政策研究;邵學(xué)彬(1986-),男,山東菏澤人,職員,工程師,碩士,研究方向:數(shù)據(jù)挖掘、軟件開發(fā)技術(shù)、汽車行業(yè)數(shù)據(jù)服務(wù)平臺(tái)開發(fā)與建設(shè);程旭(1978-),男,天津人,項(xiàng)目經(jīng)理,工程師,碩士,主要研究領(lǐng)域:數(shù)據(jù)挖掘、企業(yè)信息化等。
作者單位:中國(guó)汽車技術(shù)研究中心 數(shù)據(jù)資源中心,北京 100176
基金項(xiàng)目:中國(guó)汽車技術(shù)研究中心科研項(xiàng)目(12130109)。