diff --git a/hutool-poi/src/main/java/cn/hutool/poi/word/TableUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/word/TableUtil.java index 4a700a086..9b580a711 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/word/TableUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/word/TableUtil.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.IterUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Console; import cn.hutool.core.map.MapUtil; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; @@ -33,7 +34,7 @@ public class TableUtil { } /** - * 创建表格并填充数据 + * 创建表格并填充数据,默认表格 * * @param doc {@link XWPFDocument} * @param data 数据 @@ -41,19 +42,35 @@ public class TableUtil { */ public static XWPFTable createTable(XWPFDocument doc, Iterable data) { Assert.notNull(doc, "XWPFDocument must be not null !"); - XWPFTable table = doc.createTable(); + final XWPFTable table = doc.createTable(); + // 新建table的时候默认会新建一行,此处移除之 + table.removeRow(0); + return writeTable(table, data); + } + /** + * 为table填充数据 + * + * @param table {@link XWPFTable} + * @param data 数据 + * @return {@link XWPFTable} + * @since 5.5.6 + */ + public static XWPFTable writeTable(XWPFTable table, Iterable data){ + Assert.notNull(table, "XWPFTable must be not null !"); if (IterUtil.isEmpty(data)) { // 数据为空,返回空表 return table; } - - int index = 0; + + boolean isFirst = true; for (Object rowData : data) { - writeRow(getOrCreateRow(table, index), rowData, true); - index ++; + writeRow(table.createRow(), rowData, isFirst); + if(isFirst){ + isFirst = false; + } } - + return table; } @@ -81,7 +98,7 @@ public class TableUtil { writeRow(row, CollUtil.newArrayList(rowBean), isWriteKeyAsHead); return; } - + writeRow(row, rowMap, isWriteKeyAsHead); } diff --git a/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java b/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java index 22effb9a8..093682484 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java @@ -1,14 +1,15 @@ package cn.hutool.poi.word; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Console; -import cn.hutool.poi.word.Word07Writer; import org.junit.Ignore; import org.junit.Test; import java.awt.Font; import java.io.File; +import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; @@ -49,4 +50,36 @@ public class WordWriterTest { writer.addTable(CollUtil.newArrayList(map)); writer.flush(FileUtil.file("d:/test/test.docx")); } + + @Test + @Ignore + public void writeMapAsTableTest() { + Word07Writer writer = new Word07Writer(); + + Map data = new LinkedHashMap<>(); + data.put("姓名", "张三"); + data.put("年龄", 23); + data.put("成绩", 80.5); + data.put("是否合格", true); + data.put("考试日期", DateUtil.date()); + + Map data2 = new LinkedHashMap<>(); + data2.put("姓名", "李四"); + data2.put("年龄", 4); + data2.put("成绩", 59); + data2.put("是否合格", false); + data2.put("考试日期", DateUtil.date()); + + ArrayList> mapArrayList = CollUtil.newArrayList(data, data2); + + // 添加段落(标题) + writer.addText(new Font("方正小标宋简体", Font.PLAIN, 22), "我是第一部分"); + // 添加段落(正文) + writer.addText(new Font("宋体", Font.PLAIN, 13), "我是正文第一部分"); + writer.addTable(mapArrayList); + // 写出到文件 + writer.flush(FileUtil.file("d:/test/a.docx")); + // 关闭 + writer.close(); + } }