------------------ 原始邮件 ------------------ 发件人: "alibaba/easyexcel"***@***.***>; 发送时间: 2022年5月6日(星期五) 晚上9:22***@***.***>;***@***.******@***.***>; 主题: Re: [alibaba/easyexcel] 如何设置单元格格式为数值? (Issue #2409) 什么叫做数字格式?具体用office 设置后贴出来 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID:***@***.***>
8条答案
按热度按时间voase2hg1#
什么叫做数字格式?具体用office 设置后贴出来
rqdpfwrv2#
单元格分类为数值…
------------------ 原始邮件 ------------------ 发件人: "alibaba/easyexcel"***@***.***>; 发送时间: 2022年5月6日(星期五) 晚上9:22***@***.***>;***@***.******@***.***>; 主题: Re: [alibaba/easyexcel] 如何设置单元格格式为数值? (Issue #2409) 什么叫做数字格式?具体用office 设置后贴出来 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID:***@***.***>
a11xaf1n3#
尝试传 2 或者 直接用
NumberFormat
注解h7wcgrx34#
模板类里,定义字段的时候,不用String,用BigDecimal或Double等数值类型,导出的表格就是数值格式,不需要其他额外配置
w80xi6nr5#
请问一下,实现了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);
}
});
}
i5desfxk6#
在看测试类的时候发现,如果对象的类型不是数值类型,那么DataFormatData的格式设置为数值格式,最终导出来的结果还是字符串,这一点感觉不太友好,有办法按照自己的想法处理数据的格式吗?我记得poi是支持的
iyzzxitl7#
是通过这个方法验证的
@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());
}
ctzwtxfj8#
经过测试,按照以下写法可以实现数字格式化,及其他单元格格式的设置
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);
}
}