[alibaba/easyexcel]导出excel,如果是数值类型类型0.00会变成0, 如果是字符串类型0.00在excel文件中无法计算

2024-05-21 873 views
9

触发场景描述

触发Bug的代码

        List<List<String>> header = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            header.add(Collections.singletonList("header" + i));
        }
        ExcelWriter build = EasyExcel.write("F:/aaa2.xlsx").registerWriteHandler(EasyExcelStyleUtil.getHorizontalCellStyleStrategy())
                .build();
        WriteSheet sheet = EasyExcel.writerSheet("shell0")
                .head(header)
                .build();
        List<List<Object>> writeList = new ArrayList<>();
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            if (i == 0) {
                list.add(0.00d);
            } else if (i == 1) {
                list.add(0.00f);
            } else if (i == 2) {
                list.add(0);
            } else if(i == 3){
                list.add("0.00");
            } else {
                list.add("0");
            }
        }
        writeList.add(list);
        build.write(writeList, sheet);
        build.finish();

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

回答

2

版本2.2.3

1

这个是样式问题 后续会统一解决。方案会比较复杂。

3

这个是样式问题 后续会统一解决。方案会比较复杂。

您好,该现象如何通过代码规避解决呢?

3

I am thinking to automatically detect string of number and convert it to number before writing to excel to fix this issue.

6

开发者您好。我对这个问题很感兴趣。

我尝试在返回CellDataconvert( )函数被调用前增加一些代码,使用正则表达式检查可能是数字类型的Object Value的对象具体内容并根据检查结果转换这一变量,可以解决这个问题。

代码如下,https://github.com/alibaba/easyexcel/commit/223d38a14f920b200e8adee2754f5b1ecff852fd

@Umenezumi @HusenHuang @zhuangjiaju

执行结果如下。

image

1

已经在3.0.0-beta1 版本修复,beta版本会在一个月内升级成正式版。 使用NumberFormat注解即可