拜曉蒙 孔月萍 傅彥茹 俞鍶浩
摘要:基于VC平臺開發的應用軟件中,為方便自動地生成規范化信息處理報告,設計了擬生成報告的Office Word格式模板,構建了VC驅動Office Word創建Word報告文件、自動填入結果參數和統計圖表,形成可打印正式報告的技術方法,并以光伏陣列優化配置報告為例進行了報告自動生成方法的編程實現。實驗表明該方法生成的信息處理報告結構靈活、圖文并茂、可適應各種需求。
關鍵詞:VC驅動Word;報告自動生成;OLB類型庫
在絕大多數Visual C++(以下簡稱VC)平臺開發下的應用軟件系統中,往往具備信息處理和數據統計功能,它們的加工結果一般會用兩種方式輸出,其一是輸出到終端屏幕上供用戶瀏覽,其二是編輯成特定樣式的報告文件供打印輸出成紙質版,后一種方式需要設計處理結果或統計圖表輸出到可保存磁盤文件的方式,[1]后期可能還需要人工調整成具有特定版面格式的報告文件。現有技術往往將結果數據保存到文本文件中,但文本文件無法指定具體的輸出格式和字體效果。[2]因此,考慮在VC平臺下開發程序調用事先編輯好樣式的Microsoft Office Word(以下簡稱MS Word)報告,設計能在特定位置寫入計算結果、插入統計表格和圖片、可自動生成軟件信息處理報告的VC程序,實現標準樣式報告的自動生成。
為達到標準格式數據處理報告自動生成的目的,需要完成三個方面的工作。首先需設計用戶期望的標準格式MS Word 報告模板;第二是配置VC開發平臺下啟動MS Word的開發環境;第三是掌握VC向MS Word文件中寫入數據、表格、圖形、圖像的編程方法。下文將論述其中第二、三項工作的實現方法。
1 VC調用MS Word的開發環境配置方法
要想在VC程序中調用Microsoft Office,必須提前加入Office組件的對象類庫,方可在后續程序中使用該類庫中的諸多功能。其中,欲調用Office的Excel需要加入EXCEL9.OLB對象類型庫,欲調用Office的PowerPoint需要加入MSPPT.OLB對象類型庫,而調用Office的Word則需要加入MSWORD.OLB[2]對象類型庫。
在一個欲調MS Word的MFC工程項目中,選擇創建類向導選項,再打開界面右方出現的“Add Class/from a library”,在Microsoft Office的安裝目錄下(例如C:/Program Files/Microsoft Office/Office16)找到MSWORD.OLB類型庫,在該類型庫中選擇需要調用的類名進行導入即可。在驅動MS Word生成報告的過程中,常用的類有Application、Document、Selection等。類導入完成后,VC系統會自動生成“msword.h”和“msword.cpp”文件。至此,后續VC程序即可調用導入類型庫中的類,只要在.h或.cpp文件中添#include”msword.h”即可。[3]
導入MSWORD.OLB之后,為保證VC調用MS Word生成報告時的便捷性,可將某些類庫中的基本類進行二次自定義封裝,形成自定義類,減少后續使用時的重復編碼,節約開發工作量。[4]例如將光標操作類和字符寫入類相結合便可定義報告生成過程中的寫數據類;光標操作類、表格創建類與字符寫入類相結合便可定義報告生成過程中的創建表格并寫入數據類。將類庫中的基類根據編程需求進行二次定義、封裝帶來的好處十分明顯,是面向對象程序開發理念的最好體現。
2 VC對MS Word文件的操作方法
在完成自定義類封裝后,便可進入VC自動生成MS Word報告的程序設計階段,下面將分別陳述VC創建MS Word文件的方法,以及VC對MS Word文件的數據寫入、插入表格、插入圖形或圖像文件的編程方法。
首先,需要調用Office Word應用程序創建一個Word文檔。下述語句為Word文檔的建立方法,其中,Report為新創建的MS Word報告文件。
m_wdDocs.AttachDispatch(m_wdApp.GetDocuments())/*定義文檔*/
Report=m_wdDocs.
Add(&Template,&NewTemplate,&DocumentType,&Visible)/*創建文檔Report*/
文檔建立后,如果要在文檔的指定位置寫入數據,可以使用下面語句。其中,szText變量中存有欲寫入數據,通過該語句可將數據szText寫入文檔Report中。[5]
Selection::MoveDown(VARIANT*Unit,VARIANT*Count,VARIANT*Extend)/*光標移動*/
m_wdSel.TypeText(szText)/*寫入數據*/
當VC應用程序產生統計結果后,我們可能希望在報告中插入包含統計數據的表格,這時需要先定義表格結構tbs,它擁有的行列數為nRow、nColumn,并按此定義生成該表格。[6]具體語句如下:
Tables tbs = m_wdDoc.GetTables()/*定義表格*/
tbs.Add(m_wdSel.GetRange(),nRow,nColumn,&vtDefault,&vtAuto)/*創建表格*/
隨后,可用Cell語句定位欲操作表格的行、列位置,再用Select()選中定位的當前單元格,并向該單元插入數據szText。[7]具體編程語句如下:
Cell c = m_wdTb.Cell(nRow,nColumne)/*定位表格的行、列位置*/
c.Select()/*選中當前單元格*/
m_wdSel.TypeText(szText)/*將數據szText插入當前單元格*/
還可以根據需求向Word文件中插入JPG、BMP、PNG等多種文件格式的圖像或圖形,操作方法是先定位插入位置,之后通過函數image.AddPicture()插入圖片,即:
InlineShapes image = m_wdSel.GetInlineShapes();/*定位當前位置*/
image.AddPicture(filePath,COleVariant((short)FALSE),COleVariant((short)TRUE),&_variant_t(m_wdSel.GetRange()))/*插入圖片*/
最后,以我們開發的“光伏陣列優化配置系統報告生成”功能為樣例,闡述VC生成圖1所示配置報告的編程方法。如圖1所示,報告的題目、一級二級標題都已提前設置成了標準文本格式,[8]報告生成過程中,只需要根據每次光伏陣列優化方案的配置結果進行數據寫入,例如,在2017年1月1日,對某地(緯度94.7N、經度40.1E、海拔高度1.14m)建設的光伏電站進行了仿真排布優化設計,形成的配置報告中需要在特定位置分別插入“建設地點經緯度、配置方案仿真設計時間、光伏陣列排布設備類型、設備結構示意圖”等設計結果數據。為此,我們二次構造了寫入固定文本、插入圖片的自定義類
writeWord,而光標移動操作則通過系統類實現。
光伏陣列配置報告圖
具體的編程思路是,①設置寫入數據的字體、字號;②調用writeWord.WriteTitleFirst()語句寫入固定樣式的標題、說明性文本;③待插入配置參數可通過控制光標移動及系統方法m_wdSel.TypeTe xt(szText)寫入報告的指定位置;④獲取待插入圖片路徑后,使用insertImage函數即可插入配置圖片。相應的VC語句如下:
this>SetFont("黑體",13);/*設置字體、字號*/
writeWord.WriteTitleFirst("1、建設地經緯度:\\n")/*寫入固定文本*/
Selection::MoveDown(VARIANT*Unit,VARIANT*Count,VARIANT*Extend)/*光標移動*/
m_wdSel.TypeText(szText)/*數據szText寫入指定位置*/
CString path = getCurrentPath()+\\\\..\\\\data_info\\\\
NSProImage.bmp/*獲取需插入圖片的路徑*/
writeWord.insertImage(path)/*插入配置圖片*/
3 結語
設計了一種VC平臺驅動Microsoft Office Word,自動生成結構合理、圖文并茂的標準化數據處理報告方法。應用此項技術,可實現應用軟件系統數據記錄及報告文檔的自動化生成,有效減少系統用戶的人工文檔處理工作量。[9]借鑒文中介紹的相關技術,還有望實現Excel、PowerPoint等Microsoft Office系列文檔的自動生成。
參考文獻:
[1]張雪詠,馬紅濤,趙建峰.通過VC程序操縱Word的實現方法[J].電子技術與軟件工程,2017(11):7981.
[2]盧耀華.基于Word自動化的學位論文寫作輔助系統[D].北京理工大學,2011.
[3]陳特放,方斌.VC平臺下基于OLE的Word自動化操作應用[J].計算機應用與軟件,2009,26(09):123125.
[4]李素岐,邱崇濤,房江奇.Word技術在辦公自動化中應用[J].科技展望,2016,26(03):34.
[5]劉安宇,劉德祥,鄭立捷.基于VC++.NET的ADO數據庫連接與Word表格自動生成[J].電腦知識與技術(學術交流),2007(02):316318.
[6]劉志江,羅欣,周博,陳思宇.VC++平臺下基于OLE技術的Excel圖表自動化輸出[J].煤礦機械,2013,34(08):272275.
[7]王怒濤,李大凱,李丹,王超.VC++的Word文檔中的表與圖自動生成技術[J].石油工業計算機應用,2015(02):2023+3.
[8]劉春雷,劉春雨.Word自動化合并郵件在VC中的實現與應用[J].信息技術,2004(08):7576+80.
[9]王永鋒.VC++操作Word實現檢測報告的自動化[A].中國金屬學會.第195場中國工程科技論壇——中國科學儀器設備與試驗技術發展高峰論壇(PFIT'2014)、第四屆中國能力驗證與標準樣品論壇(4th RM & PT)、ICASI'2014 CCATM'2014國際冶金及材料分析測試學術報告會會議摘要[C].中國金屬學會:,2014:1.