[alibaba/easyexcel]模板功能右大括号(})引起的StringIndexOutOfBoundsException

2024-05-16 842 views
2

触发场景描述

在读com.alibaba.excel.write.executor.ExcelWriteFillExecutor#prepareData的时候,发现代码读FILL_PREFIXFILL_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示例写的样板填充代码。

提示的异常或者没有达到的效果

单元格数据:截屏2022-04-11 00 16 54

截屏2022-04-11 00 17 21

回答

5

提示的异常或者没有达到的效果

同样的,.COLLECTION_PREFIX)用来标识该字段为一个数组,当该字符存在于括号末尾时,该行内容都会被删除,不管是否在括号内。

image

结果:

截屏2022-04-21 00 44 13
7

我认为在 #2408 中以上的问题得到了修复,期待您的回复!

6

这是你模板使用的问题,如果模板里面有} { 需要转义