• 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

  • 相关阅读:
    spark编译
    使用MapReduce实现两个文件的Join操作
    响应式 Web 设计
    响应式 Web 设计
    900W+数据只用300ms搞定!SQL查询优化这样做最快耗时347ms
    响应式 Web 设计
    CSS3 多媒体查询实例
    CSS3 多媒体查询:查找设备的类型,CSS3 根据设置自适应显示
    CSS3 弹性盒子(Flex Box):确保元素拥有恰当的行为的布局方式
    CSS3 框大小:padding(内边距) 和 border(边框)
  • 原文地址:https://www.cnblogs.com/wutongshu-master/p/12174860.html
Copyright © 2020-2023  润新知