[alibaba/easyexcel]LongestMatchColumnWidthStyleStrategy Date类型自动列宽不生效

2024-03-07 248 views
6
触发场景描述

【必现】日期类型的字段自动列宽不生效,源码未对日期类型做处理。

image

触发Bug的代码
  public class EasyIssueReport {
    public static void main(String[] args) {
        EasyExcel.write(getTestFileOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .head(Pojo.class)
                .sheet().doWrite(getTestData());
    }

    static List<Pojo> getTestData() {
        List<Pojo> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Pojo data = new Pojo();
            data.setDate(new Date());
            data.setLocalDate(LocalDate.now());
            data.setLocalDateTime(LocalDateTime.now());
            list.add(data);
        }
        return list;
    }

    @Data
    public static class Pojo {
        @ExcelProperty("date")
        Date date;

        @ExcelProperty("localDate")
        LocalDate localDate;

        @ExcelProperty("localDateTime")
        LocalDateTime localDateTime;

        @ExcelProperty("longText")
        String text = "long long long long  long long long text";
    }
}
提示的异常或者没有达到的效果

image

回答

1

这个类确实不太精确,也有很多坑,你可以按照这个类自己实现自定义的内容

1

这个bug不是精确度的问题,是日期类型的字段自动宽度压根就不生效。

5

这个类的意思就是如果不能满足就自己实现 只是一个辅助类。 文档中也写了

8

现在的情况是case语句忽略了Date类型,那能否尽可能完善下这个类呢。

5

自定义很香啊 而且也不复杂 日期在excel中限制还要根据excel单元格的显示方式,需求是无穷无尽的。 就像数字你长了之后在excel可能就是科学计数法了

有一个方法是你可以把日期类型的表头设置长一点 这样列就长了

0

你说的这些方法我也知道,我能提issue到这边来就是希望能完善下,因为日期类型是一种比较常见的类型,官方能支持当然是最好的。