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

如何用Apache POI在Java中读取Excel单元格内的JSON对象数组

解决Apache POI读取Excel JSON单元格内容不全的问题

问题描述

将Excel表格导入MySQL数据库时,某单元格存储的是JSON数组格式内容,但使用Apache POI的getStringCellValue()方法读取时,仅返回“20 Gb”,无法获取完整的JSON数组字符串,需要实现读取原始JSON并原样存入数据库的需求。现有代码片段:

Integer price = row.getCell(0).getNumericCellValue(); 
String name = row.getCell(1).getStringCellValue(); 
String value = row.getCell(2).getStringCellValue();  

(注:Excel单元格实际内容应为类似[{"name":"RAM","value":"20 Gb"},{"name":"Storage","value":"512 Gb"}]的JSON数组,但读取结果仅为其中某一项值)

解决方案

1. 强制将单元格转为字符串类型读取

通过手动设置单元格类型为字符串,绕过POI的自动类型识别,直接读取原始文本:

Cell jsonCell = row.getCell(2);
// 先判断单元格是否为空
if (jsonCell != null) {
    jsonCell.setCellType(CellType.STRING);
    String fullJson = jsonCell.getStringCellValue();
    // 后续将fullJson存入数据库
}

注意:Apache POI 4.x及以上版本中,setCellType(CellType.STRING)会触发警告,若介意可使用下方方法。

2. 使用DataFormatter读取原始内容

DataFormatter可以适配各种单元格类型(包括公式、文本),配合FormulaEvaluator能准确获取单元格的原始输入内容:

DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell jsonCell = row.getCell(2);
String fullJson = "";
if (jsonCell != null) {
    fullJson = formatter.formatCellValue(jsonCell, evaluator);
}
// 后续存入数据库

3. 检查Excel文件本身

若上述方法仍无法读取完整JSON,需确认Excel单元格的编辑栏内容:

  • 若编辑栏显示的就是“20 Gb”,说明单元格实际存储的并非完整JSON,需检查Excel数据的来源(比如是否通过公式提取了JSON的某一部分);
  • 若编辑栏显示完整JSON,说明单元格格式设置为仅显示部分内容,调整单元格格式为“文本”后再重新读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:50:25