文章目錄
- 關于POI-TL 匯出Word的一些使用
- 一、前期準備?
- 二、代碼演示
- 1.資料結構
- 2.代碼示例
- 2.1 寫入表頭表體的資料
- 2.2 設定合并規則
- 2.3 輸出結果
- 總結
關于POI-TL 匯出Word的一些使用
最近在做專案時候遇到的一個關于匯出Word的檔案的需求,簡單的資料展示可以根據POI-TL的官方的檔案還是可以做出來的,但是有一些表格的合并處理poi-tl只是給了簡單例子,前期的學習可以參考POI-TL(http://deepoove.com/poi-tl/)官方檔案,及給出的一些簡單的原始碼(https://github.com/Sayi/poi-tl),話不多說上代碼
提示:以下是本篇文章正文內容,下面案例可供參考
一、前期準備?
<font color=#999AAA
Apache POI 4.1.2+
JDK 1.8+
這個地方需要注意的是:要根據自己專案的JDK來引入的對應版本的,POI-TL 官方給出來的JDK對應的版本要求

二、代碼演示
1.資料結構
public class DocData {
private String title;
private String date;
private TableRenderData renderData;
}

GET SET方法就省略了,這個資料結構換成你自己需要的資料結構就可以了,圖片是對應的WORD 模板,{{}}里面放入物件中對應的屬性,{{#}}是獲取TableRenderData 表格資料的方式,這些都可以在POI-TL官方學習到
2.代碼示例
2.1 寫入表頭表體的資料
DocData docData = new DocData();
TableRenderData renderData = new TableRenderData();
//設定的合并規則
MergeCellRule.MergeCellRuleBuilder mergeCellRuleBuilder = MergeCellRule.builder();
//設定表頭
RowRenderData header = Rows.of("姓名", "特長", "是否獲獎").bgColor("F2F2F2").center()
.textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create();
//表體內容
RowRenderData row = Rows.of("小紅", "游泳", "否").center().create();
RowRenderData row1 = Rows.of("小紅", "鋼琴", "八級").center().create();
RowRenderData row2 = Rows.of("小紅", "圍棋", "否").center().create();
RowRenderData row3 = Rows.of("小明", "游泳", "全國一等獎").center().create();
RowRenderData row4 = Rows.of("小明", "擊劍", "無").center().create();
RowRenderData row5 = Rows.of("小梅", "圍棋", "無").center().create();
RowRenderData row6 = Rows.of("小梅", "跆拳道", "黑帶").center().create();
RowRenderData row7 = Rows.of("小梅", "長跑", "國家一級運動員").center().create();
RowRenderData row8 = Rows.of("小梅", "舉重", "無").center().create();
RowRenderData row9 = Rows.of("小剛", "臉特長", "").center().create();
可以看出我們設定了表頭內容分別是姓名、特長、獲獎情況,姓名是重復的資料,我們希望將相同的姓名合并在一起,我們需要用到 **MergeCellRule.MergeCellRuleBuilder mergeCellRuleBuilder = MergeCellRule.builder();**設定合并的規則
2.2 設定合并規則
代碼中標明注釋,表格的合并根據自己的需求去設定規則,
//設定樣式顏色尺寸等等
TableStyle.BorderStyle borderStyle = new TableStyle.BorderStyle();
borderStyle.setColor("A6A6A6");
borderStyle.setSize(4);
borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
TableRenderData tableRenderData = Tables.ofA4MediumWidth().addRow(header)
.addRow(row).addRow(row1).addRow(row2).addRow(row3).addRow(row4)
.addRow(row5).addRow(row6).addRow(row7).addRow(row8).addRow(row9)
.border(borderStyle).center()
.create();
/**
* 設定表格合并規則
* 1.起始行 MergeCellRule.Grid.of(i, j) i: 行 j: 列
* 2.結束行 MergeCellRule.Grid.of(i, j) i: 行 j: 列
*/
mergeCellRuleBuilder.map(MergeCellRule.Grid.of(1, 0), MergeCellRule.Grid.of(3, 0));//小紅合并
mergeCellRuleBuilder.map(MergeCellRule.Grid.of(4, 0), MergeCellRule.Grid.of(5, 0));//小明合并
mergeCellRuleBuilder.map(MergeCellRule.Grid.of(6, 0), MergeCellRule.Grid.of(9, 0));//小梅合并
/**
* MergeCellRule支持多合并規則,會以Map的形式存入可以看一下原始碼
* !!! 一定要設定完規則后再呼叫 MergeCellRule的build方法進行構建
*/
tableRenderData.setMergeRule(mergeCellRuleBuilder.build());
2.3 輸出結果
docData.setTitle("測驗測驗測驗");
docData.setDate(DateUtil.formatAsDatetime(new Date()));
docData.setRenderData(tableRenderData);
File file = ResourceUtils.getFile("D:\\Java\\ideawork\\word\\target\\test-classes\\demo.docx");
XWPFTemplate template = XWPFTemplate.compile(file).render(docData);
template.writeToFile("D:\\測驗例子.docx");
這里獲取的是絕對路徑,根據自己WORD模板放在的位置進行獲取,輸出位置自己設定就好了,最后是我們輸出的結果展示,可以看到名字相同的人已經進行了合并,

總結
第一次分享,不足的地方請指出,需要原始碼請私信,看到后會及時處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/247692.html
標籤:其他
