easyexcel注解样式无效_EasyExcel无法用转换器或者注解将java字段写入为excel的数值格式...

在使用EasyExcel导出报表并尝试将BigDecimal字段转换为数值或货币格式时,遇到注解样式无效的问题。尝试了转换器和@NumberFormat注解,但未能成功。通过深入研究源码,发现在写入时EasyExcel的数据格式转换不支持。最终解决方案是利用Apache POI直接创建和设置单元格样式,手动将单元格类型设为NUMERIC并应用预设的数字格式,从而解决了格式问题。
摘要由CSDN通过智能技术生成

需求:

在用easyExcel导出报表时,碰到需要将数据转换为数值or货币格式的需求

过程:

1.首先采取转换器的形式

@Override

public CellData convertToExcelData(BigDecimal bigDecimal, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {

if (ObjectUtils.isEmpty(bigDecimal)) {

bigDecimal=BigDecimal.ZERO;

}

CellData cellData = new CellData(new DecimalFormat("#,##0.00").format(bigDecimal.setScale(2)));

return cellData;

}

发现生成的excel依旧是常规格式

2.采用@NumberFormat注解,依旧不行

3.修改转换器为

@Override

public CellData convertToExcelData(BigDecimal bigDecimal, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {

if (ObjectUtils.isEmpty(bigDecimal)) {

bigDecimal=BigDecimal.ZERO;

}

CellData cellData = new CellData(CellDataTypeEnum.NUMBER );

cellData.setDataFormatString("##,##0.00");

cellData.setNumberValue(bigDecimal);

return cellData;

}

按理说应该可以了,可依旧不行,并且连千位分隔符也不见了

查看源码

发现是数据的格式转换只支持在读的时候

解决:

因为EasyExcel底层也是poi,所以可以用poi的格式转换来实现

if (!isHead && relativeRowIndex < list.size()&& head.getFieldName().equals("sjje")) {

if (ObjectUtils.isEmpty(cacheCellStyle.get("numberCellStyle"))) {

CellStyle cellStyle = writeSheetHolder.getSheet().getWorkbook().createCellStyle();

DataFormat dataFormat = writeSheetHolder.getSheet().getWorkbook().createDataFormat();

cellStyle.setDataFormat(dataFormat.getFormat("#,##0.00"));

cacheCellStyle.put("numberCellStyle", cellStyle);

}

cell.setCellType(CellType.NUMERIC);

cell.setCellStyle(cacheCellStyle.get("numberCellStyle"));

}

成功转换

over

EasyExcel是阿里巴巴开发的一个用于导入导出Excel的工具库。在使用EasyExcel进行导出Excel的过程中,你遇到了一个奇怪的现象,即使用@contentStyle注解设置样式无效。经过调试发现,EasyExcel在处理样式时使用了缓存来提高效率。但是需要注意的是,字段名称需要满足一定的规则才能正确使用注解。具体来说,字段名称的前两个单词必须同时为大写或小写,否则会被转换成其他名称。这就导致了字段名称不一致,无法获取到对应的注解,从而导致样式设置无效。解决这个问题的方法是修改字段名称,使其符合规则。这个问题可能会让人感到有些困惑,但一旦了解了规则,就能够正确地使用注解设置样式了。\[1\] #### 引用[.reference_title] - *1* [【EasyExcel使用坑记】——部分字段注解无效](https://blog.csdn.net/keith_pan20/article/details/129933524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [EasyExcel无法转换器或者注解java字段写入excel数值格式](https://blog.csdn.net/weixin_34206129/article/details/111889388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值