alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32.69k stars 7.58k forks source link

版本3.1.1,EasyExcel导出支持千分位 #3853

Closed YangJingf closed 4 months ago

YangJingf commented 4 months ago

1、Maven依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>poi-ooxml-schemas</artifactId>
                    <groupId>org.apache.poi</groupId>
                </exclusion>
            </exclusions>
        </dependency>

2、实体类

    @DateTimeFormat("#,##0.00")
    private BigDecimal endNetValue;

或者

  @NumberFormat("#,###.00")
    private BigDecimal endNetValue;

都没有千分位效果 image

YangJingf commented 4 months ago

难道是数值的类型要double才可以吗

psxjoy commented 4 months ago

跑了一下官方demo,显示是正常。建议升级版本到3.3.4+。

image

YangJingf commented 4 months ago

跑了一下官方demo,显示是正常。建议升级版本到3.3.4+。

image 已经升级到3.3.4,还是不行 `

com.alibaba easyexcel 3.3.4 poi-ooxml-schemas org.apache.poi

`

YangJingf commented 4 months ago

升级到3.3.4之后还是没效果 xml: `

com.alibaba
        <artifactId>easyexcel</artifactId>
        <version>3.3.4</version>
        <exclusions>
            <exclusion>
                <artifactId>poi-ooxml-schemas</artifactId>
                <groupId>org.apache.poi</groupId>
            </exclusion>
        </exclusions>
    </dependency>`

java实体类: ` /**

sch1446795386 commented 4 months ago

自定义一个CellWriteHandler可以实现

YangJingf commented 4 months ago

这个问题解决了,主要是通过继承LongestMatchColumnWidthStyleStrategy的方式,也就是自定义CellWriteHandler。 关键代码如下:

   if ((num = cellStyleMap.get(context.getColumnIndex())) != null) {
            DataFormat format = workbook.createDataFormat();
            short dataFormat = format.getFormat(BuiltinFormats.getBuiltinFormat(num));
            thousandthsCellStyle.setDataFormat(dataFormat);
            return thousandthsCellStyle;
        }

cellStyleMap是为了精确控制某一列,以及其对应的单元格式值。

psxjoy commented 4 months ago

这个问题解决了,主要是通过继承LongestMatchColumnWidthStyleStrategy的方式,也就是自定义CellWriteHandler。 关键代码如下:

   if ((num = cellStyleMap.get(context.getColumnIndex())) != null) {
            DataFormat format = workbook.createDataFormat();
            short dataFormat = format.getFormat(BuiltinFormats.getBuiltinFormat(num));
            thousandthsCellStyle.setDataFormat(dataFormat);
            return thousandthsCellStyle;
        }

cellStyleMap是为了精确控制某一列,以及其对应的单元格式值。

Good Job!

psxjoy commented 4 months ago

This issue has been completed, I will close this issue.