国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于報表和模板的報告生成方法研究

2021-05-29 15:33毛燠鋒潘玉春朱玉付
軟件工程 2021年5期
關(guān)鍵詞:數(shù)據(jù)挖掘模板

毛燠鋒 潘玉春 朱玉付

摘? 要:隨著電力報表在輸變電運(yùn)維中的普及以及數(shù)據(jù)分析報告生成的迫切需求,急需一種將報表數(shù)據(jù)轉(zhuǎn)換成可用的分析報告的方法。本文針對上述需求,提出了一套完整的基于電力報表和Apache POI技術(shù)的分析報告生成流程,實(shí)現(xiàn)了將歷史數(shù)據(jù)以圖表的形式嵌入預(yù)設(shè)模板中,并最終形成格式統(tǒng)一的分析報告,有效地提高了數(shù)據(jù)分析人員的效率。

關(guān)鍵詞:數(shù)據(jù)挖掘;電力報表;分析報告;Apache POI;模板

中圖分類號:TP391? ? ?文獻(xiàn)標(biāo)識碼:A

A Report Generation Method based on Report Form and Template

MAO Yufeng, PAN Yuchun, ZHU Yufu

(NR Electric CO., LTD., Nanjing 211102, China)

maoyf@nrec.com; panyc@nrec.com; zhuyufu@nrec.com

Abstract: With the popularity of power reports in operation and maintenance of power transmission and transformation, and the urgent need for data analysis reports, a method of converting report data into usable analysis reports is urgently needed. To meet the above needs, this paper proposes a complete analysis report generation process based on power reports and Apache POI technology. The proposed method makes historical data embedded into the preset template in the form of charts, and finally forms a unified analysis report. It effectively improves the efficiency of data analysts.

Keywords: data mining; power report; analysis report; Apache POI; template

1? ?引言(Introduction)

雖然電力行業(yè)目前有很多成熟的B/S或者C/S數(shù)據(jù)展示系統(tǒng),但通常是作為展示工具的,即使有下載功能也僅僅是將查詢到的數(shù)據(jù)以各種圖表的形式展示出來,無法直接生成分析報告的形式。對于需要分析報告用于匯報或者歸檔的用戶來說,實(shí)現(xiàn)分析文檔的自動生成工作必要而且急切。本文介紹了一種方便快捷的分析文檔生成方式,即先按照用戶的需求使用報表工具將電力實(shí)時庫中的數(shù)據(jù)以圖表的形式導(dǎo)出到Excel中,然后使用POI類庫取出相應(yīng)的數(shù)據(jù)并插入預(yù)設(shè)模板中生成符合用戶需求的分析報告。針對生成的報告在不同的Office工具中格式不一致問題,使用OpenOffice[1]軟件實(shí)現(xiàn)版本轉(zhuǎn)換,并最終生成樣式固定的可直接使用的數(shù)據(jù)分析報告。

2? ?相關(guān)技術(shù)(Related technologies)

電力數(shù)據(jù)通常保存在實(shí)時數(shù)據(jù)庫中,要利用相關(guān)數(shù)據(jù)生成文檔需要將數(shù)據(jù)庫中的數(shù)據(jù)提取出來并以圖表的形式進(jìn)行表示,鑒于電力報表的高實(shí)用性與可擴(kuò)展性,可用于實(shí)現(xiàn)該功能。在將需要的數(shù)據(jù)導(dǎo)出成圖表等格式后,需要將其插入預(yù)設(shè)文檔中。POI類庫是Java中操作文檔的通用性工具類,在其基礎(chǔ)上擴(kuò)展可形成用于文檔內(nèi)容插入的基礎(chǔ)類,使用該類可實(shí)現(xiàn)圖表數(shù)據(jù)到模板數(shù)據(jù)的轉(zhuǎn)化。在得到分析文檔后由于使用了合并表格單元格操作,導(dǎo)致在不同的文檔工具中表格的預(yù)覽效果出現(xiàn)差異,可以使用開源的OpenOffice進(jìn)行轉(zhuǎn)化從而實(shí)現(xiàn)格式一致,在用戶檢查無誤后該分析文檔可作為最終的分析報告進(jìn)行發(fā)布。

2.1? ?電力報表

報表是以表格、圖表的形式來動態(tài)展示數(shù)據(jù)的可視化工具[2],使用報表工具可以對數(shù)據(jù)庫中的各類數(shù)據(jù)進(jìn)行實(shí)時分析,進(jìn)而用于輔助管理決策。報表工具具有專業(yè)、簡捷、靈活的特點(diǎn),在部署設(shè)置完成后可以直接使用,形成基于特定領(lǐng)域的數(shù)據(jù)分析展示系統(tǒng)。使用純Java開發(fā)的報表工具結(jié)合具體的電力行業(yè)業(yè)務(wù)需求,便形成了電力報表工具,在電力報表的基礎(chǔ)上結(jié)合具體的數(shù)據(jù)和流程便形成了電力數(shù)據(jù)分析子系統(tǒng)。由于使用的報表工具是純Java開發(fā),對于不滿足需求的功能或者新增功能可以進(jìn)行二次開發(fā),在此基礎(chǔ)上形成滿足實(shí)際需求的電力報表工具。

本文在電力報表的基礎(chǔ)上將需求的數(shù)據(jù)導(dǎo)出到分類Excel中,包括告警、支流、環(huán)流、運(yùn)行單位等統(tǒng)計信息。導(dǎo)出格式按統(tǒng)計信息的類型分布在不同的Excel中,對于相同類型但層次不同的數(shù)據(jù)可以分布在不同的sheet中,Excel中格式需要保持穩(wěn)定,方便后續(xù)程序進(jìn)行遍歷讀取處理。

2.2? ?POI類庫

Apache POI是Apache軟件基金會開發(fā)的標(biāo)準(zhǔn)類庫[3],具有使用方便、集成度高、可擴(kuò)展性強(qiáng)等特點(diǎn)。在Java程序中使用POI類庫可實(shí)現(xiàn)對Microsoft Office進(jìn)行各種基本操作,包括生成文檔文件、提取文檔信息和修改樣式等。本文中主要使用POI技術(shù)實(shí)現(xiàn)從Excel中讀取圖表數(shù)據(jù)并按照規(guī)范名稱存放,后續(xù)再將其插入分析模板中并最終形成分析文檔。具體操作流程圖如圖1所示。

2.2.1? ?圖表提取

Apache POI類庫是將Excel中各個元素(包括Workbook、sheet、row、cell等)的操作方法封裝成函數(shù)的形式[4],開發(fā)者在POI類庫的基礎(chǔ)上使用自定義函數(shù)將Excel各個元素中包含的信息提取出來。

在使用報表工具將需要的圖表導(dǎo)出到Excel后,可以使用POI類庫將其提取出來并分類保存,對于圖片格式數(shù)據(jù)按規(guī)范名稱保存在文件夾下,對于表格以對象的形式保存在內(nèi)存中,方便后續(xù)使用。

算法1 使用POI提取圖表信息

輸入:表格的工作簿(HSSFWorkbook)workbook,outImgPath圖片保存的位置

1: function getSheetPictrues(workbook)

2: SSFPictureData > pictures = workbook.getAllPictures();//獲取所有圖片信息

3: for HSSFShape shape : sheet.getDrawingPatriarch().getChildren() do

4:? ? ?HSSFPicture pic = (HSSFPicture) shape;

5:? ? ?int pictureIndex = pic.getPictureIndex() - 1;

6:? ?HSSFPictureData picData = pictures.get(pictureIndex);

7:? ? String picIndex = fileNameNoExt+(sheetNum +1)+(pictureIndex+1);//設(shè)置圖片名稱

8:? ? sheetIndexPicMap.put(picIndex, picData); //將名稱和信息以鍵子對的形式存儲在map中

9:? ?end for

10: end function

11:

12: function getSheetTable(sheet)? //獲取表格信息

13: for j = sheet.getFirstRowNum()—>sheet.getPhysicalNumberOfRows()+ sheet.getFirstRowNum() do

14:? Row row = sheet.getRow(j);//定位到sheet中的一行

15:? ? Cell cell = row.getCell(k);//定位于單元格

16:? ? obj = cell.getNumericCellValue();//獲取單元格值

17:? ? rowValue.put(k, obj);//將值保存到內(nèi)存中

18:? end for

19: end function

上述操作可以將報表保存到Excel中的數(shù)據(jù)提取出來,對于圖片信息按照自定義的名稱保存在本地,對于表格信息以map鍵子對的形式提取到內(nèi)存中。在對圖片和表格提取完成后,準(zhǔn)備工作已經(jīng)就緒。

2.2.2? ?圖表渲染

poi-tl是在Apache POI的基礎(chǔ)上純Java開發(fā)的自定義Word模板引擎,具有跨平臺、易移植、集成度高等特點(diǎn)。使用poi-tl技術(shù)可以實(shí)現(xiàn)在預(yù)設(shè)模板的基礎(chǔ)上插入信息,并保持格式一致性,即將模板中的{{info}}等信息替換成需要的信息,其中{{}}為通配符,info可為具體信息,也可為模塊信息(表格、圖片等),根據(jù)用戶的實(shí)際需求設(shè)置即可。

插入表格的代碼流程如下:

算法2 使用poi-tl實(shí)現(xiàn)圖表渲染

輸入:tableList表格數(shù)據(jù)對象

1: function renderTable(tableList)

2:? for int i:tabIndex.size() do? // tabIndex.size()為表格寬度

3:? textRender.add(new TextRenderData(color,

String.valueOf(tableList1.get(1).get(i))));//設(shè)置表頭

4:? ?end for

5:? header = new RowRenderData(textRender, BackgroundColor);//渲染表頭

6:? ?rows = RowRenderData.build(row);//row為行數(shù)據(jù)

7:? ?tableDatas.add(rows);//加入數(shù)組中

8:? ?test=new MiniTableRenderData(header, tableDatas, MiniTableRenderData.WIDTH_A4_FULL);//表格數(shù)據(jù)渲染

9:? ?data1.put(tab, test);//生成表格

10:? data1.put(picName,new PictureRenderData(550,350,pictures[i].getName())); //生成圖片

11:? Configure config=Configure.newBuilder().customPolicy("hl0",new DetailTablePolicy()).build();

12:? XWPFTemplate template = XWPFTemplate.compile(moban, config);//將規(guī)則應(yīng)用到模板中

13:? template.render(data1);//將data1數(shù)據(jù)整個插入文檔中

14: FileOutputStream out = new FileOutputStream(outDoc);//輸出生成的報告

15: end function

預(yù)設(shè)模板是將用戶需要的文檔中的具體內(nèi)容替換成通配符,完成預(yù)設(shè)模板的設(shè)置后可直接運(yùn)行程序提取信息并插入模板。針對生成文檔中需要調(diào)整的地方,可以將需求提供給開發(fā)人員進(jìn)行相應(yīng)的程序調(diào)整,對于無法調(diào)整的則需要用戶進(jìn)行手動調(diào)整并最終形成用戶需要的報告形式。對于需要合并單元格的不規(guī)則表格,可以使用key值匹配自定義規(guī)則DetailTablePolicy進(jìn)行操作,最終得到樣式豐富的表格樣式。針對表格數(shù)據(jù)的陳述性描述,則可以在程序中進(jìn)行組織并插入通配符中,圖片數(shù)據(jù)在設(shè)置大小后也會匹配到相應(yīng)的位置。經(jīng)過上述步驟可以實(shí)現(xiàn)將報表中導(dǎo)出的數(shù)據(jù)完美適配到模板文檔中,并經(jīng)過調(diào)整獲取最終用戶需要的報告的形式。

2.3? ?OpenOffice轉(zhuǎn)換

實(shí)驗(yàn)的過程中會遇到生成的Word分析文檔中的表格在不同的工具(Microsoft Office和WPS等)下展示的格式會發(fā)生偏差,這是由于不同的Office中定義的樣式不一致導(dǎo)致的。為了保持格式一致,必須將樣式統(tǒng)一,在實(shí)驗(yàn)的過程中發(fā)現(xiàn)使用Microsoft Office的版本轉(zhuǎn)換工具可以使樣式保持統(tǒng)一,由于版權(quán)問題最終選擇使用OpenOffice來實(shí)現(xiàn)相應(yīng)的功能。OpenOffice是一款優(yōu)秀而且免費(fèi)的跨平臺辦公軟件,具有安裝方便、功能強(qiáng)大等特點(diǎn)[5],與目前主流的辦公軟件也兼容。使用OpenOffice可以實(shí)現(xiàn)Office的在線編輯和格式轉(zhuǎn)換等工作,該軟件提供統(tǒng)一的對外接口,開發(fā)者可以根據(jù)實(shí)際需求使用命令調(diào)用相應(yīng)的功能,但相對的異常處理過程比較煩瑣。為了簡化操作,在OpenOffice上引入jodconverter架包用于管理OpenOffice。jodconverter是一個文檔轉(zhuǎn)換器工具包,在OpenOffice、PageOffice等開源Office工具的基礎(chǔ)上實(shí)現(xiàn)文檔的轉(zhuǎn)換工作,具有集成度高、可操作性強(qiáng)的特點(diǎn)。

Jodconverter是一款純Java編寫的Office文件轉(zhuǎn)換器,實(shí)現(xiàn)了對Office工具相關(guān)功能的使用和控制[6],其使用相關(guān)的方法實(shí)現(xiàn)相應(yīng)的程序接口調(diào)用,用戶只需要關(guān)注需要實(shí)現(xiàn)的功能而不用關(guān)注具體的實(shí)現(xiàn)和處理過程,具體實(shí)現(xiàn)如圖2所示。

3? ?實(shí)驗(yàn)效果(Experimental effect)

本章在上述技術(shù)的基礎(chǔ)上使用模板文檔生成目標(biāo)需要的分析文檔,在用戶檢查無誤的情況下可直接作為最終可發(fā)布的報告。其中模板文檔將動態(tài)變化的部分用通配符代替,存放在程序部署的服務(wù)器中,由于報表導(dǎo)出數(shù)據(jù)耗時較多,報表的生成使用crontab[7]執(zhí)行生成腳本作為定時任務(wù),而圖表的提取以及模板的插入耗時較少,在用戶點(diǎn)擊下載文檔按鈕時執(zhí)行。在做好上述準(zhǔn)備后,即可運(yùn)行程序生成最終的文檔,實(shí)驗(yàn)效果如圖3和圖4所示。

從上圖可以發(fā)現(xiàn),原始模板中可設(shè)置的內(nèi)容使用通配符進(jìn)行替換[8],對于表格信息需要先插入單個單元格并定義好格式,不規(guī)則表格的渲染在程序后端定義規(guī)則后根據(jù)info值進(jìn)行引入。由于表格信息存放在內(nèi)存中,對于需要文字渲染的

部分遍歷對比輸出即可。使用該方法得到的報告具有結(jié)構(gòu)完整、集成度高、內(nèi)容豐富等特點(diǎn),因此該方法適用于格式固定、內(nèi)容豐富的報告的自動生成工作。用戶在提供原始模板后需要的操作僅僅是對生成的報告進(jìn)行核實(shí),該方法有效地提高了工作效率。

4? ?結(jié)論(Conclusion)

隨著計算機(jī)技術(shù)的發(fā)展及其在電力行業(yè)的普及,使用計算機(jī)技術(shù)解決電力行業(yè)中遇到的實(shí)際問題愈發(fā)普遍。本文在滿足用戶需求的基礎(chǔ)上克服了開發(fā)過程中遇到的困難,形成了一整套完整的從數(shù)據(jù)庫中的實(shí)時數(shù)據(jù)到分析文檔的生成流程,并基于該流程開發(fā)相應(yīng)的工具實(shí)現(xiàn)了分析文檔的自動生成。在具體實(shí)現(xiàn)過程中使用電力報表以圖表的形式獲取用戶需要的數(shù)據(jù),然后使用POI技術(shù)在預(yù)設(shè)的文檔基礎(chǔ)上將其生成用戶需要的分析文檔,最后為了保持格式的一致使用OpenOffice將其格式進(jìn)行轉(zhuǎn)換,在完成上述流程后即可獲得最終的分析文檔供用戶使用。在實(shí)際的應(yīng)用中,如果需要按照一定的模板定期生成發(fā)布文檔可參考上述流程,結(jié)合實(shí)際的需求進(jìn)行差異化開發(fā),從而簡化人工的操作,提高工作效率。

雖然該方法中使用了報表工具和POI技術(shù),但是報表是使用腳本執(zhí)行的,而使用POI技術(shù)的相關(guān)導(dǎo)入導(dǎo)出則使用的是Java程序來開發(fā),兩者之間存在異步操作,這也導(dǎo)致了可能存在數(shù)據(jù)不一致的問題,后續(xù)開發(fā)中可以在Java程序中直接調(diào)用報表的功能,并將相應(yīng)的數(shù)據(jù)存放在內(nèi)存中然后導(dǎo)出到模板中。

參考文獻(xiàn)(References)

[1] 周洪林,何興無.基于Linux的OpenOffice.org應(yīng)用[J].信息技術(shù),2012,36(07):144-146.

[2] 唐遠(yuǎn)濤.基于Web報表開發(fā)的研究與應(yīng)用[D].成都:成都理工大學(xué),2006.

[3] Bawankule K L, Raut N B. Design and implementation of massive MYSQL data intelligent export system to excel by using Apache–POI libraries[J]. IOSR Journal of Computer Engineering, 2014, 16(5): 58-65.

[4] 吉豪杰,宋欣潮.POI用戶模型的重構(gòu)與優(yōu)化[J].軟件,

2019(5):193-199.

[5] Comeau T, Garrett B, Richon J, et al. Using OpenOffice as a portable interface to JAVA-based applications[J]. Astronomical Data Analysis Software & Systems XIII, 2004, 314:701-703.

[6] 楊權(quán).基于OpenOffice服務(wù)對新聞編輯方式的改進(jìn)[J].現(xiàn)代計算機(jī),2017(24):83-86.

[7] 郭迪,趙政文,王璽.基于cron的計劃任務(wù)時間管理的設(shè)計與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(14):62-64.

[8] 邵欣欣,張明會,高梓峻.文檔生成技術(shù)研究與應(yīng)用[J].軟件工程,2018,21(01):15-17.

作者簡介:

毛燠鋒(1992-),男,碩士,工程師.研究領(lǐng)域:數(shù)據(jù)挖掘,軟件開發(fā).

潘玉春(1981-),男,碩士,工程師.研究領(lǐng)域:電力系統(tǒng)WEB可視化.

朱玉付(1989-),男,本科,工程師.研究領(lǐng)域:軟件開發(fā).

猜你喜歡
數(shù)據(jù)挖掘模板
探討人工智能與數(shù)據(jù)挖掘發(fā)展趨勢
基于并行計算的大數(shù)據(jù)挖掘在電網(wǎng)中的應(yīng)用
鋁模板在高層建筑施工中的應(yīng)用
一種基于Hadoop的大數(shù)據(jù)挖掘云服務(wù)及應(yīng)用
城市綜改 可推廣的模板較少
基于GPGPU的離散數(shù)據(jù)挖掘研究
调兵山市| 宁安市| 博客| 鹤山市| 喜德县| 新乡市| 伽师县| 贵港市| 泰宁县| 蓝山县| 兴隆县| 内丘县| 桑植县| 通江县| 抚松县| 武隆县| 措美县| 定西市| 黄骅市| 四子王旗| 鹤庆县| 河曲县| 安福县| 闽侯县| 清徐县| 浑源县| 五峰| 西昌市| 南康市| 邢台市| 田林县| 台安县| 麻栗坡县| 景德镇市| 肃北| 汕尾市| 石林| 靖江市| 淮安市| 海伦市| 砀山县|