easyexcel注解样式无效_EasyExcel无法用转换器或者注解将java字段写入为excel的数值格式..._科技娜评的博客-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依旧是常规格式

[email protected],依旧不行

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


原网址: 访问
创建于: 2021-09-22 16:47:42
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论