参考官方文档@ContentStyle(dataFormat = 1)设置,BUILTIN_FORMATS_CN这个类所有参数都试了,没有数值格式,求帮助
[alibaba/easyexcel]如何设置单元格格式为数值?
回答
什么叫做数字格式?具体用office 设置后贴出来
单元格分类为数值
尝试传 2 或者 直接用NumberFormat
注解
模板类里,定义字段的时候,不用String,用BigDecimal或Double等数值类型,导出的表格就是数值格式,不需要其他额外配置
请问一下,实现了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); } }); }
在看测试类的时候发现,如果对象的类型不是数值类型,那么DataFormatData的格式设置为数值格式,最终导出来的结果还是字符串,这一点感觉不太友好,有办法按照自己的想法处理数据的格式吗?我记得poi是支持的
是通过这个方法验证的 @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()); }
经过测试,按照以下写法可以实现数字格式化,及其他单元格格式的设置
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);
}
}
}
read不知道您是否已经解决该问题?我们先暂时关闭这个问题,如果还存在问题请重新Reopen这个issue