From 7a0ecc555bb6973394e5b5581254b53cbc4e0e39 Mon Sep 17 00:00:00 2001 From: ttt-noora <11911336@mail.sustech.edu.cn> Date: Sat, 28 May 2022 14:39:08 +0800 Subject: [PATCH] fix#2376 --- .../executor/ExcelWriteFillExecutor.java | 6 +-- .../easyexcel/test/demo/write/WriteTest.java | 42 +++++++++++++++--- easyexcel-test/src/test/resources/fill/t.xlsx | Bin 0 -> 11801 bytes 3 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 easyexcel-test/src/test/resources/fill/t.xlsx 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 0000000000000000000000000000000000000000..459ca124f3b86213369a4fee35dd96493380f805 GIT binary patch literal 11801 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 Uz=ZlS0EY%R`4RTe|M>O)0Q4`Z`~Uy| literal 0 HcmV?d00001