[alibaba/easyexcel]如何设置单元格格式为数值?

2024-05-16 468 views
0

参考官方文档@ContentStyle(dataFormat = 1)设置,BUILTIN_FORMATS_CN这个类所有参数都试了,没有数值格式,求帮助

回答

5

什么叫做数字格式?具体用office 设置后贴出来

0

单元格分类为数值

5

尝试传 2 或者 直接用NumberFormat 注解

9

模板类里,定义字段的时候,不用String,用BigDecimal或Double等数值类型,导出的表格就是数值格式,不需要其他额外配置

4

请问一下,实现了handler,为什么设置的数值格式不生效呢? implements CellWriteHandler

public void afterCellDispose(CellWriteHandlerContext context) { cellDataList.forEach(cellData->{ String stringValue = cellData.getStringValue(); if (NumberUtils.isCreatable(stringValue)) { System.out.println(); cellData.setType(CellDataTypeEnum.NUMBER); WriteCellStyle writeCellStyle = cellData.getOrCreateStyle(); DataFormatData dataFormatData = new DataFormatData(); dataFormatData.setFormat("0.0"); writeCellStyle.setDataFormatData(dataFormatData); cellData.setWriteCellStyle(writeCellStyle); } }); }

4

在看测试类的时候发现,如果对象的类型不是数值类型,那么DataFormatData的格式设置为数值格式,最终导出来的结果还是字符串,这一点感觉不太友好,有办法按照自己的想法处理数据的格式吗?我记得poi是支持的

4

是通过这个方法验证的 @Test public void simpleWrite3() { // 写法1 String fileName = TestFileUtil.getPath() + "t33" + System.currentTimeMillis() + ".xlsx"; // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 // 如果这里想使用03 则 传入excelType参数即可 EasyExcel.write(fileName).head(head()).inMemory(true).sheet("模板").registerWriteHandler(new WriteCellHandler()).doWrite( data1()); }

7

经过测试,按照以下写法可以实现数字格式化,及其他单元格格式的设置

public class CustomWriteHandler implements CellWriteHandler {

@Override public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?> cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { String stringValue = cellData.getStringValue(); // 数字 if (NumberUtils.isCreatable(stringValue)) { WriteCellStyle writeCellStyle = new WriteCellStyle(); DataFormatData dataFormatData = new DataFormatData(); dataFormatData.setIndex(HSSFDataFormat.getBuiltinFormat("0.00")); writeCellStyle.setDataFormatData(dataFormatData); cellData.setNumberValue(new BigDecimal(stringValue)); cellData.setType(CellDataTypeEnum.NUMBER); cellData.setWriteCellStyle(writeCellStyle); }

    // 百分比
    if (stringValue.contains("%")) {
        WriteCellStyle writeCellStyle = new WriteCellStyle();
        DataFormatData dataFormatData = new DataFormatData();
        dataFormatData.setIndex(HSSFDataFormat.getBuiltinFormat("0.00%"));
        writeCellStyle.setDataFormatData(dataFormatData);
        cellData.setNumberValue(new BigDecimal(stringValue.replace("%", "")));
        cellData.setType(CellDataTypeEnum.NUMBER);
        cellData.setWriteCellStyle(writeCellStyle);

    }
}

}

8

read不知道您是否已经解决该问题?我们先暂时关闭这个问题,如果还存在问题请重新Reopen这个issue