需求:

在用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

原文:https://www.cnblogs.com/wutongshu-master/p/12174860.html

GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io` 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐