Open chinleo opened 3 weeks ago
使用列填充(垂直填充) 的时候发现, 列数据的长度存在超过 102 就会引发这个问题
目前测试需要具备以下的前提条件
测试模板.xlsx
pom.xml
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.3.3</version> </dependency>
package com.easyexcel.testcase; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.enums.WriteDirectionEnum; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; import lombok.Value; import java.io.File; import java.util.ArrayList; import java.util.List; public class ExcelBug { public static void main(String[] args) { bug(); normal1(); normal2(); } /** * 只要不是最后一次填充, 只要数据>102 就会出现文件损坏 */ private static void bug(){ File temp = new File("/Users/chinleo/Downloads/测试模板.xlsx"); File out = new File("/Users/chinleo/Downloads/测试模板out-bug.xlsx"); WriteSheet targetSheet = EasyExcel.writerSheet().build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(false).build(); try (ExcelWriter writer = EasyExcel.write(out) .withTemplate(temp) .build()) { writer.fill(new FillWrapper("dataType1", genData("dataType1-", 10)), fillConfig, targetSheet); writer.fill(new FillWrapper("dataType2", genData("dataType2-", 150)), fillConfig, targetSheet); writer.fill(new FillWrapper("dataType3", genData("dataType3-", 200)), fillConfig, targetSheet); } } private static void normal1(){ File temp = new File("/Users/chinleo/Downloads/测试模板.xlsx"); File out = new File("/Users/chinleo/Downloads/测试模板out-normal1.xlsx"); WriteSheet targetSheet = EasyExcel.writerSheet().build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(false).build(); try (ExcelWriter writer = EasyExcel.write(out) .withTemplate(temp) .build()) { writer.fill(new FillWrapper("dataType1", genData("dataType1-", 10)), fillConfig, targetSheet); // 当条数<=102时, 正常 writer.fill(new FillWrapper("dataType2", genData("dataType2-", 102)), fillConfig, targetSheet); writer.fill(new FillWrapper("dataType3", genData("dataType3-", 20)), fillConfig, targetSheet); } } private static void normal2(){ File temp = new File("/Users/chinleo/Downloads/测试模板.xlsx"); File out = new File("/Users/chinleo/Downloads/测试模板out-normal2.xlsx"); WriteSheet targetSheet = EasyExcel.writerSheet().build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(false).build(); try (ExcelWriter writer = EasyExcel.write(out) .withTemplate(temp) .build()) { writer.fill(new FillWrapper("dataType1", genData("dataType1-", 10)), fillConfig, targetSheet); writer.fill(new FillWrapper("dataType3", genData("dataType3-", 20)), fillConfig, targetSheet); // 最后写最长的也正常 writer.fill(new FillWrapper("dataType2", genData("dataType2-", 200)), fillConfig, targetSheet); } } private static List<Data> genData(String value, int size) { List<Data> data = new ArrayList<>(size); for (int i = 0; i < size; i++) { data.add(Data.of(value + i)); } return data; } @Value(staticConstructor = "of") static class Data { String fullName; } }
触发场景描述
使用列填充(垂直填充) 的时候发现, 列数据的长度存在超过 102 就会引发这个问题
目前测试需要具备以下的前提条件
测试模板.xlsx
触发Bug的代码
pom.xml
提示的异常或者没有达到的效果