easyexcel
easyexcel copied to clipboard
模板功能右大括号(})引起的StringIndexOutOfBoundsException
触发场景描述
在读com.alibaba.excel.write.executor.ExcelWriteFillExecutor#prepareData的时候,发现代码读FILL_PREFIX和FILL_SUFFIX时没有先检查前后顺序就调用subString方法,因此在前括号{之前存在未被注释的后括号}时会出现java.lang.StringIndexOutOfBoundsException异常,在没读过源码的情况下可能会很困惑,可以增加判断进行优化。
触发Bug的代码
@Getter
@Setter
@EqualsAndHashCode
public class FillData {
@ContentFontStyle(underline = Font.U_SINGLE)
private String name;
@ContentFontStyle(underline = Font.U_SINGLE)
private double number;
}
@Test
public void simpleFill() {
String templateFileName =
TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simpleIssue.xlsx";
// 方案1 根据对象填充
String fileName = TestFileUtil.getPath() + "simpleFillIssue" + System.currentTimeMillis() + ".xlsx";
//测试代码
FillData fillData = new FillData();
fillData.setName("张三");
fillData.setNumber(5.2);
EasyExcel.write(fileName,FillData.class).withTemplate(templateFileName).sheet().doFill(fillData);
}
照着demo示例写的样板填充代码。
提示的异常或者没有达到的效果
单元格数据:

提示的异常或者没有达到的效果
同样的,.(COLLECTION_PREFIX)用来标识该字段为一个数组,当该字符存在于括号末尾时,该行内容都会被删除,不管是否在括号内。
结果:
我认为在 #2408 中以上的问题得到了修复,期待您的回复!
这是你模板使用的问题,如果模板里面有} { 需要转义