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

Java读取Excel数值类型如何转为无科学计数法的普通字符串

问题原因

你直接调用currentCell.getNumericCellValue()获取到的是double类型的数值,当数值长度超过11位时,Java将double转为字符串时会自动使用科学计数法格式输出,就会出现你遇到的9.94775287264E11这类结果。

最优解决方案

使用Apache POI自带的DataFormatter工具类处理单元格值,它会完全按照Excel中单元格的显示格式将内容转为字符串,无需自行区分单元格类型,也不会出现科学计数法问题。

修正后的代码示例

import org.apache.poi.ss.usermodel.DataFormatter;

public static Response acceptFile(File file) {
    // 初始化DataFormatter,全局只需要实例化一次即可
    DataFormatter dataFormatter = new DataFormatter();
    try {
        FileInputStream excelFile = new FileInputStream(file);
        Workbook workbook = new XSSFWorkbook(excelFile);
        Sheet datatypeSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = datatypeSheet.iterator();
        // 如果Excel有表头,可加一行iterator.next()跳过第一行
        while (iterator.hasNext()) {
            Row currentRow = iterator.next();
            // 按实际列索引取对应字段,避免遍历所有单元格覆盖变量
            // 假设第0列是手机号,第1列是短信内容,可根据你的实际Excel结构调整索引
            String phoneNumber = dataFormatter.formatCellValue(currentRow.getCell(0));
            String textMessage = dataFormatter.formatCellValue(currentRow.getCell(1));
            
            // 每一行数据处理完直接插入数据库,避免最后只插入最后一条
            insertExcellFileToDb(phoneNumber, textMessage);
            System.out.println(phoneNumber + " " + textMessage);
        }
        workbook.close();
        excelFile.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

原有代码额外问题说明

你原有的逻辑是遍历每行的所有单元格,每次命中字符串类型就覆盖phoneNumber、命中数值类型就覆盖textMessage,最终只会保留最后一行最后一个单元格的值,且所有行处理完才调用一次插入方法,只能插入最后一条数据,上面的修正代码已经修复了这个问题。

替代方案(仅处理数值类型)

如果你不想统一用DataFormatter处理,也可以针对数值类型单独用BigDecimal转换:

else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
    BigDecimal bd = BigDecimal.valueOf(currentCell.getNumericCellValue());
    // toPlainString()会输出无科学计数法的字符串
    textMessage = bd.toPlainString();
}

这个方案适合明确知道单元格是整数数值的场景,如果Excel中该列有自定义格式(比如带千分位、日期格式等),还是优先用DataFormatter方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:15:03