需求:
在用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