Java中将Excel数据存入ArrayList的核心是用Apache POI读取Excel,逐行逐单元格解析并封装为对象或数组后添加;需处理空值、类型判断及格式化,推荐使用DataFormatter统一数值显示。

Java 中把 Excel 表格数据存入 ArrayList,核心是用第三方库读取 Excel(如 Apache POI),再逐行逐单元格解析,封装成对象或基本类型后添加进 ArrayList。关键在于正确读取单元格内容并处理空值、类型转换等细节。
使用 Apache POI 读取 Excel 并存入 ArrayList
Apache POI 是 Java 最常用的 Excel 处理库,支持 .xls(HSSF)和 .xlsx(XSSF)格式。
- 添加 Maven 依赖(以最新稳定版为例):
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.4</version>
</dependency>
注意:需同时引入 poi 和 poi-ooxml,否则读取 .xlsx 会报错。
读取 Excel 行数据,存入 ArrayList<String[]>(简单场景)
适合结构固定、无需对象映射的表格(如纯数值或字符串列表):
立即学习“Java免费学习笔记(深入)”;
- 用
FileInputStream打开文件,创建XSSFWorkbook或HSSFWorkbook - 获取第一个 sheet:
workbook.getSheetAt(0) - 遍历行(跳过标题行可从第 1 行开始),对每行遍历单元格,用
cell.getStringCellValue()或cell.getNumericCellValue()获取值 - 将每行转为
String[],add 到ArrayList<String[]>
⚠️ 注意:必须判断单元格类型(cell.getCellType()),避免 IllegalStateException;推荐用 DataFormatter 统一格式化输出。
读取为自定义对象列表 ArrayList<User>
更实用的方式——把每行映射为一个 Java 对象(如 User):
- 定义实体类(含 name、age、email 等字段)
- 读取时跳过首行(标题),用
Row.getRowNum()控制起始位置 - 对每一行,按列索引取值(如
row.getCell(0).getStringCellValue()),new User(...) 后 add 进ArrayList<User> - 对数字/日期单元格,用
cell.getNumericCellValue()+DateUtil.isCellDateFormatted(cell)判断是否为日期,再转LocalDateTime或int
示例逻辑片段:
List<User> users = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row == null) continue;
String name = getCellValue(row.getCell(0));
int age = (int) row.getCell(1).getNumericCellValue();
users.add(new User(name, age));
}
工具方法:安全获取单元格字符串值
避免空指针和类型异常,建议封装通用读取方法:
- 检查
cell == null→ 返回空字符串 - 根据
cell.getCellType()分支处理:STRING、NUMERIC、BOOLEAN、BLANK - 对
NUMERIC,用DataFormatter转成字符串(保留 Excel 显示格式,如 “12.00” 而非 12.0)
这样后续存入 ArrayList<String> 或构建对象都更可靠。


















