fix #I2B57B

This commit is contained in:
Looly 2020-12-29 18:59:12 +08:00
parent 7d25da459f
commit 0c0f06f832
2 changed files with 59 additions and 9 deletions

View File

@ -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);
}

View File

@ -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<String, Object> data = new LinkedHashMap<>();
data.put("姓名", "张三");
data.put("年龄", 23);
data.put("成绩", 80.5);
data.put("是否合格", true);
data.put("考试日期", DateUtil.date());
Map<String, Object> data2 = new LinkedHashMap<>();
data2.put("姓名", "李四");
data2.put("年龄", 4);
data2.put("成绩", 59);
data2.put("是否合格", false);
data2.put("考试日期", DateUtil.date());
ArrayList<Map<String, Object>> 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();
}
}