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

使用Apache POI读取Excel:按列存单元格值到数组及代码问询

如何用Apache POI按列读取Excel数据并存入数组?

嘿,我看你现在已经能用Apache POI遍历Excel并打印所有内容了,要改成按列把数据存进数组其实只需要调整一下遍历顺序,再做些小处理就行~

首先,你原来的代码是行优先遍历(先遍历每一行,再遍历该行的每个单元格),而按列存储需要改成列优先:先确定总列数,为每一列单独准备存储容器(比如List<String>,后续可转成数组),接着遍历每一列,再逐个读取该列下每一行的单元格值。

另外还要注意两个细节:

  • 有些行可能是空的,直接调用getRow(i)会返回null,需要做非空判断
  • 单元格类型不止字符串(比如数字、日期),直接用getStringCellValue()可能报错,建议用DataFormatter统一获取单元格文本内容,兼容性更好

下面是修改后的完整代码:

import org.apache.poi.ss.usermodel.*;
import java.util.ArrayList;
import java.util.List;

// 假设你已初始化好searcsheet(注意变量名是不是打错了?应该是searchSheet?)
DataFormatter formatter = new DataFormatter(); // 统一处理不同类型的单元格
int columnCount = searcsheet.getRow(0).getLastCellNum(); // 假设第一行是表头,获取总列数
List<List<String>> columnData = new ArrayList<>();

// 先初始化每一列的存储列表
for (int j = 0; j < columnCount; j++) {
    columnData.add(new ArrayList<>());
}

// 列优先遍历:外层循环列,内层循环行
for (int j = 0; j < columnCount; j++) {
    List<String> currentColumn = columnData.get(j);
    for (int i = 0; i <= searcsheet.getLastRowNum(); i++) {
        Row row = searcsheet.getRow(i);
        if (row == null) {
            // 空行添加空字符串,也可根据需求自定义处理
            currentColumn.add("");
            continue;
        }
        Cell cell = row.getCell(j);
        // 用DataFormatter获取单元格文本,兼容数字、日期等类型
        String cellValue = formatter.formatCellValue(cell);
        currentColumn.add(cellValue);
    }
}

// 若需要将List转为数组
String[][] columnArrays = new String[columnCount][];
for (int j = 0; j < columnCount; j++) {
    columnArrays[j] = columnData.get(j).toArray(new String[0]);
}

// 测试打印第一列数据
System.out.println("第一列数据:");
for (String value : columnArrays[0]) {
    System.out.println(value);
}

代码关键点说明:

  1. DataFormatter的作用:不管单元格是数字、日期还是字符串,都能转换成对应文本,避免类型转换异常
  2. 空行处理:判断row == null时主动添加空字符串,保证每一列的元素数量和行数一致
  3. 列优先遍历逻辑:外层循环列、内层循环行,确保每一列的数据被连续收集
  4. List转数组:如果业务需要数组类型,用toArray()方法即可完成转换

这样就能实现你想要的按列将单元格值存入数组的功能啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:13:01