diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java index 6779e875..aa918dfc 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java @@ -210,10 +210,10 @@ public class ExcelWriteFillExecutor extends AbstractExcelWriteExecutor { if (analysisCell.getOnlyOneVariable()) { String variable = analysisCell.getVariableList().get(0); - if (!dataKeySet.contains(variable)) { - continue; + Object value = null; + if (dataKeySet.contains(variable)) { + value = dataMap.get(variable); } - Object value = dataMap.get(variable); ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(dataMap, writeContext.currentWriteHolder().excelWriteHeadProperty().getHeadClazz(), variable); cellWriteHandlerContext.setExcelContentProperty(excelContentProperty); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index f7d015ca..df06217b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -3,11 +3,7 @@ package com.alibaba.easyexcel.test.demo.write; import java.io.File; import java.io.InputStream; import java.net.URL; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; @@ -30,6 +26,7 @@ import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.util.BooleanUtils; import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.util.ListUtils; +import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; import com.alibaba.excel.write.merge.LoopMergeStrategy; @@ -56,7 +53,40 @@ import org.junit.Test; */ @Ignore public class WriteTest { - + /** + * 根据模板写入 + *

+ * 1. 创建excel对应的实体对象 参照{@link IndexData} + *

+ * 2. 使用{@link ExcelProperty}注解指定写入可能带有缺失值的列 + *

+ * 3. 使用withTemplate 写取模板 + *

+ * 4. 直接写即可 + */ + @Test + public void templateWrite_1(){ + // 采用List构造两条数据 + List datas = new ArrayList<>(); + { + Map map = new HashMap(); + map.put("account", "account1"); + // 此处缺少name,所以未设置name + // 因为数据库是按照纵表方式设计和存储的,读取出来的数据可能缺少某些key + datas.add(map); + } + { + Map map = new HashMap(); + map.put("account", "account2"); + map.put("name", "name2"); + datas.add(map); + } + // 按列表填充方式生成excel文件 + String templateFileName = "C:\\Users\\Tan\\Desktop\\easyexcel\\easyexcel-test\\src\\test\\resources\\fill\\t.xlsx"; + String fileName = "users.xlsx"; + ExcelWriterSheetBuilder sheet = EasyExcel.write(fileName).withTemplate(templateFileName).sheet(); + sheet.doFill(datas); + } /** * 最简单的写 *

diff --git a/easyexcel-test/src/test/resources/fill/t.xlsx b/easyexcel-test/src/test/resources/fill/t.xlsx new file mode 100644 index 00000000..459ca124 Binary files /dev/null and b/easyexcel-test/src/test/resources/fill/t.xlsx differ