EasyExcel无法用转换器或者注解将java字段写入为excel的数值格式

需求:

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

posted @ 2020-01-10 10:26  梧桐树master  阅读(7247)  评论(0编辑  收藏  举报