• 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

  • 相关阅读:
    Linux下搭建socks5代理
    在vs2005 使用FreeTextBox
    毕业了!!
    ASP.net 2.0上传图片方法
    再网页中,怎么用VS2005中的日历空件输入日期格式!
    毕业设计!!
    学校终于放假了,今天就可以回家了!
    求职!本人是07届刚毕业的学生!求程序员
    libcurl教程(转)
    spring boot集成swagger3
  • 原文地址:https://www.cnblogs.com/wutongshu-master/p/12174860.html
Copyright © 2020-2023  润新知