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

如何读取仅含单列数据的Excel文件(附Java实现代码)

如何用Java读取仅包含单列数据的Excel文件

如果要读取只有单列数据的Excel文件,Apache POI的XSSF组件是个常用的选择(用于处理.xlsx格式)。先看你提供的这段代码,里面有几个明显的问题会导致运行异常或者数据读取错误,我先梳理这些问题,再给出修正后的可运行代码。

原代码的核心问题

  • 工作簿提前关闭:你在获取工作表sheet之前就调用了wrkbook.close(),这会直接导致后续操作抛出IllegalStateException,因为工作簿资源已经被释放了
  • 循环索引越界:列循环的条件j <= colNum是错误的——单元格索引从0开始,正确的边界应该是j < colNum;另外对于单列数据来说,列数固定为1,这个循环其实可以简化
  • 未处理空单元格/空行:直接调用String.valueOf(cell)会在单元格为空时得到null,或者遇到非字符串类型单元格时出现格式问题

修正后的完整实现

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class SingleColumnExcelReader {

    // 读取单列Excel数据,返回二维数组(兼容多列场景,单列也适用)
    public Object[][] getSingleColumnExcelData(String excelFilePath) {
        Object[][] dataSet = null;
        FileInputStream inputStream = null;
        XSSFWorkbook workbook = null;

        try {
            inputStream = new FileInputStream(new File(excelFilePath));
            workbook = new XSSFWorkbook(inputStream);
            // 获取第一个工作表(如果Excel有多个工作表,可根据需求调整索引)
            XSSFSheet sheet = workbook.getSheetAt(0);

            if (sheet == null) {
                System.out.println("指定的工作表不存在或为空");
                return null;
            }

            // getLastRowNum()返回最后一行的索引,所以实际行数是索引+1
            int totalRows = sheet.getLastRowNum() + 1;
            final int COLUMN_COUNT = 1; // 单列数据,固定列数为1
            dataSet = new Object[totalRows][COLUMN_COUNT];

            // 遍历每一行读取单列数据
            for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) {
                XSSFRow row = sheet.getRow(rowIndex);
                if (row == null) {
                    // 空行直接填充空字符串,避免空指针
                    dataSet[rowIndex][0] = "";
                    continue;
                }

                XSSFCell cell = row.getCell(0);
                // 统一处理不同类型的单元格,确保返回字符串格式
                dataSet[rowIndex][0] = getCellStringValue(cell);
            }

            return dataSet;
        } catch (IOException e) {
            System.err.println("读取Excel文件时发生错误: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // 务必关闭资源,避免内存泄漏
            try {
                if (workbook != null) workbook.close();
                if (inputStream != null) inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null; // 发生异常时返回null
    }

    /**
     * 辅助方法:将单元格转换为字符串,处理空单元格和不同数据类型
     */
    private String getCellStringValue(XSSFCell cell) {
        if (cell == null) {
            return "";
        }

        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue().trim();
            case NUMERIC:
                // 若为日期类型,可单独处理,这里默认转成字符串
                return String.valueOf(cell.getNumericCellValue());
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                // 若需要计算公式结果,可使用FormulaEvaluator,这里直接返回公式字符串
                return cell.getCellFormula();
            default:
                return "";
        }
    }
}

使用提示

  1. 引入依赖:确保你的项目中添加了Apache POI的Maven/Gradle依赖,以Maven为例:
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version> <!-- 使用最新稳定版即可 -->
</dependency>
  1. 调用示例:
public static void main(String[] args) {
    SingleColumnExcelReader reader = new SingleColumnExcelReader();
    Object[][] data = reader.getSingleColumnExcelData("path/to/your/single-column.xlsx");
    if (data != null) {
        for (Object[] row : data) {
            System.out.println("单列数据:" + row[0]);
        }
    }
}
  1. 扩展说明:如果你的Excel是.xls格式,只需把XSSF相关类替换成HSSF类即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:05:48