郭博雷 張鵬 武林偉 趙坤 田晗
(中國(guó)電子科技集團(tuán)公司第二十七研究所 河南省鄭州市 450047)
為解決從大量數(shù)據(jù)中進(jìn)行數(shù)據(jù)整理、統(tǒng)計(jì)、形成報(bào)告對(duì)人力資源的消耗,將“人”從篩選數(shù)據(jù)的重復(fù)性勞動(dòng)中解放出來(lái),研究了一種采用“Word 定制模板+xml 配置+C#實(shí)現(xiàn)”的方式自動(dòng)生成文檔報(bào)告的方法。此方法考慮了不同項(xiàng)目、不同數(shù)據(jù)種類(lèi)、不同報(bào)告格式的需求,只需少量修改定制模板、xml 配置文件即可解決實(shí)際項(xiàng)目需求。
Office Word 是普及面很廣的圖片和文字編輯工具,具有界面操作簡(jiǎn)單、易用性強(qiáng)的特點(diǎn),支持模板應(yīng)用,支持多種編程語(yǔ)言通過(guò)組建對(duì)象模型對(duì)Word 軟件進(jìn)行操控。可擴(kuò)展標(biāo)記語(yǔ)言XML 是一種以結(jié)構(gòu)化的開(kāi)放格式描述數(shù)據(jù)的元數(shù)據(jù)定義語(yǔ)言,具有把信息的結(jié)構(gòu)、內(nèi)容和顯示分離開(kāi)的能力,允許用戶(hù)任意定義元素的名稱(chēng)和屬性及文檔數(shù)據(jù)的結(jié)構(gòu)。C#是一種由C 和C++衍生出來(lái)的編程語(yǔ)言,既繼承了C 和C++的強(qiáng)大功能,又綜合了VB 的簡(jiǎn)單可視化操作和C++的高效運(yùn)行,其面向?qū)ο蟮淖吭叫允怪蔀闃?gòu)建各類(lèi)組件的理想選擇。
Word 和C#的優(yōu)越性能,為筆者實(shí)現(xiàn)基于C#和定制模板的自動(dòng)出報(bào)方法提供有力支持。下面按照實(shí)現(xiàn)步驟,從模板制作、編碼實(shí)現(xiàn)、自動(dòng)出報(bào)三個(gè)階段闡述此方法。
圖1: 定制模板制作
圖2: 添加書(shū)簽
常規(guī)Word 版報(bào)告,可分為文字描述、表格數(shù)據(jù)呈現(xiàn)、圖例展示三部分,因此,在進(jìn)行模板制作時(shí),按照文字、表格、圖例三類(lèi)進(jìn)行模板制作、書(shū)簽設(shè)置和xml 配置。
模板制作與書(shū)簽設(shè)置,是實(shí)現(xiàn)此方法的前提工作。Word模板制作工作流程如下:
(1)新建Word 模板,根據(jù)項(xiàng)目需求編輯出報(bào)所需呈現(xiàn)的文字、表格、圖例:設(shè)置文字的字體、字號(hào)、顏色、段落行距、樣式(是否加粗、是否添加底紋背景等);設(shè)置表格標(biāo)注、表頭、單元格的字體、字號(hào)、顏色、段落行距、樣式、設(shè)計(jì)邊框線(xiàn)型線(xiàn)寬等;設(shè)置圖例的圖注字體、字號(hào)、顏色、段落行距、樣式、圖片版式;
(2)為出報(bào)時(shí)需要替換的文字、表格、圖例等數(shù)據(jù)源添加書(shū)簽,為書(shū)簽命名;
(3)模板制作完成后,保存模板。
xml 配置主要完成書(shū)簽的定義工作,包括書(shū)簽的格式定義等。xml 配置工作流程如下:
(1)新建xml 文檔,為文字類(lèi)書(shū)簽自定義字體、字號(hào)、顏色、段落行距、樣式(是否加粗、是否添加底紋背景等);
(2)為表格類(lèi)書(shū)簽設(shè)置表頭、單元格字體、字號(hào)、顏色、段落行距、樣式、設(shè)計(jì)邊框線(xiàn)型線(xiàn)寬等,為每一列綁定數(shù)據(jù)源名稱(chēng);
(3)為圖例類(lèi)書(shū)簽設(shè)置段落行距、圖片版式等。
注意,書(shū)簽名稱(chēng)必須與Word 模板書(shū)簽名稱(chēng)保持一致,否則,C#編碼實(shí)現(xiàn)時(shí),會(huì)因?yàn)檎也坏綍?shū)簽而無(wú)法將書(shū)簽替換為有效值。
模板制作完成后,使用C#進(jìn)行編碼實(shí)現(xiàn)。以下為出報(bào)主函數(shù)和參數(shù)類(lèi)型定義。因代碼量較大,以解釋性語(yǔ)言代替代碼貼出來(lái),供需要者梳理軟件流程。
圖3: 模板定制流程
自動(dòng)出報(bào)階段,主要包括出報(bào)數(shù)據(jù)準(zhǔn)備、整編出報(bào)兩部分。出報(bào)數(shù)據(jù)準(zhǔn)備,顧名思義,為自動(dòng)出報(bào)提供數(shù)據(jù)準(zhǔn)備、圖例準(zhǔn)備。包括根據(jù)查詢(xún)條件從數(shù)據(jù)庫(kù)中檢索滿(mǎn)足查詢(xún)條件的數(shù)據(jù),將查詢(xún)結(jié)果經(jīng)過(guò)字典翻譯、無(wú)效值剔除后,顯示在界面列表上;查詢(xún)圖例文件,獲取圖例;根據(jù)數(shù)據(jù)、圖例查詢(xún)結(jié)果,為出報(bào)函數(shù)提供輸入?yún)?shù)。整編出報(bào)部分,主要完成定制模板的調(diào)用,使用待出報(bào)數(shù)據(jù)替換書(shū)簽;根據(jù)xml 配置文件調(diào)整報(bào)告格式,形成Word 版報(bào)告。
此部分功能需要進(jìn)行編碼實(shí)現(xiàn)。本文是在Visual Studio 2010 平臺(tái)上采用C#語(yǔ)言進(jìn)行的功能開(kāi)發(fā)。此部分功能通用化程度高,只要確保Word 模板中的書(shū)簽名稱(chēng)與xml 配置文件中的書(shū)簽名稱(chēng)一致,可以無(wú)需考慮模板的特異性,實(shí)現(xiàn)不同種類(lèi)定制模板的整編出報(bào)。軟件流程如圖4 所示,形成的Word 版報(bào)告如圖5 所示。
圖4: 自動(dòng)出報(bào)軟件流程
圖5: 根據(jù)定制模板生成的報(bào)告
筆者研究了兩種不同的出報(bào)方法實(shí)現(xiàn)自動(dòng)出報(bào)功能,在配置為Intel i7-6700、CPU 3.40GHz、8GB 內(nèi)存的計(jì)算機(jī)上,兩種出報(bào)方法效率均為秒級(jí)(不考慮數(shù)據(jù)查詢(xún)、顯示耗費(fèi)的時(shí)長(zhǎng)),且兩種方法均實(shí)用,可根據(jù)需要自行選擇。表1 為兩種出報(bào)方法對(duì)比情況表。
表1: 基于xml+定制模板、基于SQL+定制模板兩種出報(bào)方法比較
因項(xiàng)目需要,研究了一種基于C#和定制模板的自動(dòng)出報(bào)方法,進(jìn)行了編碼實(shí)現(xiàn),并對(duì)比分析了此方法的優(yōu)缺點(diǎn)。采用此方法僅需少量修改定制模板、xml 配置文件,即可實(shí)現(xiàn)不同項(xiàng)目出報(bào)需求,通用化程度高,出報(bào)快,為快速實(shí)現(xiàn)出報(bào)節(jié)省大量人力資源,可廣泛應(yīng)用于需要出報(bào)的各行業(yè)項(xiàng)目。