easyexcel 如何设置单元格格式为数值?

thtygnil  于 2022-10-22  发布在  其他
关注(0)|答案(8)|浏览(754)

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

voase2hg

voase2hg1#

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

rqdpfwrv

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:***@***.***>

a11xaf1n

a11xaf1n3#

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

h7wcgrx3

h7wcgrx34#

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

w80xi6nr

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);
}
});
}

i5desfxk

i5desfxk6#

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

iyzzxitl

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());
}

ctzwtxfj

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);
}

// 百分比
    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);

    }
}

}

相关问题