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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM