SpringBoot整合poi-tl實現導出多張數據表結構和word文本

我太難了

作爲一個偉大又渺小的猿,竟然被這個問題困擾了接近三天,我太難了。
  導出word生成文本數據、生成一張表都是soeasy,今天我這裏記錄的是生成文本和多張表。
  廢話不多說,先看看效果圖:
  在這裏插入圖片描述

這裏使用的技術是SpringBoot + poi-tl ,poi-tl(poi template language)是基於Apache POI的Word模板引擎,純Java組件,跨平臺,代碼短小精悍,通過插件機制使其具有高度擴展性。
  實現這個操作運用了poi-tl的表格模板文檔模板。詳情請看:官方文檔
  核心思想:文檔模板就相當於一張紙,表格模板就相當於一個表格,我們在紙上畫多個表格、寫多個文字,文檔模板將表格模板包裹住,相當於外包裝。
 導出之前,我們先創建兩個word模板,這兩個模板一定要區分清楚:
 1.表格模板
 {圖片}
::::標準名稱是文本信息,{{#table}},這裏的表達式類似於一個定位符,告訴程序我們要在這裏開始畫表,對應的java代碼看後面
 2.文檔模板
 {圖片}
::::其他都是描述性文本,{{+standardInfo}}是生成多張表的關鍵。作用於{{#table}}類似
上代碼:

controller這些我就不寫了,關鍵看看ServiceImpl中的邏輯
{圖片}
說明: RowRenderData.build()是一個構建函數,幫助我們構建表的結構,包括表頭header,style,行數據等等。一個RowRenderData相當於一行數據,這裏我將數據轉換成一個List<RowRenderData>的集合,一個集合就相當於一張表格的數據,最後放在map中。
注意: map.put(“standardName”,standard.getName()); key:standardName一定要和表格模板上的名稱{{standardName}}一致,
同樣: map.put(“table”,new MiniTableRenderData(header,listOne)); table要個表格模板中的{{#table}}一致
{圖片}

說明: 傳過來的數據dataList是用於填充表格模板的,新建的map集合是用來填充文檔模板的,最後將表格封裝好的DocxRenderData對象加入map,map.put(“standardInfo”, standardInfo);注意:這裏的key:standardInfo一定要和文檔模板中的:{{+standardInfo}}名稱一致
{圖片}
最後收尾工作,輸出到瀏覽器實現,訪問我們controller層寫的接口,就能實現下載一個word文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章