You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现xlsx转csv时整数被转为float类型的问题如何处理

问题原因

Apache POI 中所有标注为NUMERIC类型的单元格,调用getNumericCellValue()方法时统一返回double类型,整数值会自动补.0变为浮点格式,就是你遇到的整数转float的问题。

解决方法

方案1:修改原有NUMERIC分支判断逻辑

兼容日期格式和整数/小数格式的数值单元格,修改switch中NUMERIC分支的代码即可:

case NUMERIC:
    // 先判断单元格是否为日期格式(日期在POI中也属于NUMERIC类型)
    if (DateUtil.isCellDateFormatted(cell)) {
        // 自定义日期输出格式,可按需调整
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        data.append(sdf.format(cell.getDateCellValue())).append(",");
    } else {
        double numVal = cell.getNumericCellValue();
        // 判断是否为整数
        if (numVal == Math.floor(numVal) && !Double.isInfinite(numVal)) {
            // 整数转long输出,避免带.0后缀
            data.append((long) numVal).append(",");
        } else {
            // 小数直接输出
            data.append(numVal).append(",");
        }
    }
    break;

需要提前导入对应依赖类:

  • org.apache.poi.ss.usermodel.DateUtil
  • java.text.SimpleDateFormat

方案2:使用DataFormatter工具类(更通用)

POI自带的DataFormatter可以直接读取单元格在Excel中显示的原始字符串,无需手动判断类型,适配所有单元格格式,代码更简洁:

  1. 先在单元格循环外初始化工具类:
DataFormatter dataFormatter = new DataFormatter();
  1. 原有整个switch判断逻辑可以替换为一行代码:
String cellValue = dataFormatter.formatCellValue(cell);
data.append(cellValue).append(",");

导入对应类:org.apache.poi.ss.usermodel.DataFormatter

内容的提问来源于stack exchange,提问作者Charles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 11:42:03