Browse Source

fix #I2B57B

Looly 5 years ago
parent
commit
0c0f06f832

+ 25 - 8
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);
 	}
 	

+ 34 - 1
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<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();
+	}
 }