读取本地excel删除第一行,并生成List数组

在 pom.xml 里添加如下依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

编写 Java 代码:运用 Apache POI 读取 Excel 文件,删除首行,把其余行数据存入 List。

示例代码

java 复制代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelReader {
    public static List<List<String>> readExcelWithoutFirstRow(String filePath) throws IOException {
        List<List<String>> dataList = new ArrayList<>();
        try (FileInputStream fis = new FileInputStream(new File(filePath));
             Workbook workbook = new XSSFWorkbook(fis)) {
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 从第二行开始遍历
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                if (row != null) {
                    List<String> rowData = new ArrayList<>();
                    // 遍历当前行的每个单元格
                    for (int j = 0; j < row.getLastCellNum(); j++) {
                        Cell cell = row.getCell(j);
                        if (cell != null) {
                            rowData.add(getCellValueAsString(cell));
                        } else {
                            rowData.add("");
                        }
                    }
                    dataList.add(rowData);
                }
            }
        }
        return dataList;
    }

    private static String getCellValueAsString(Cell cell) {
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf((long) cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }

    public static void main(String[] args) {
        String filePath = "path/to/your/excel/file.xlsx";
        try {
            List<List<String>> resultList = readExcelWithoutFirstRow(filePath);
            // 打印 List 中的数据
            for (List<String> row : resultList) {
                for (String cellValue : row) {
                    System.out.print(cellValue + "\t");
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释

readExcelWithoutFirstRow 方法:

该方法接收一个 Excel 文件路径作为参数,返回一个 List<List> 对象。

利用 FileInputStream 读取 Excel 文件,借助 XSSFWorkbook 创建工作簿对象。

获取首个工作表,从第二行(索引为 1)开始遍历。

针对每一行,遍历其每个单元格,把单元格的值存入 rowData 列表,再将 rowData 列表添加到 dataList 中。

getCellValueAsString 方法:

此方法用于把单元格的值转为字符串类型。

依据单元格的类型(像字符串、数字、布尔值、公式等),采用不同方式获取其值。

main 方法:

调用 readExcelWithoutFirstRow 方法读取 Excel 文件,将结果存于 resultList 中。

遍历 resultList,打印其中的数据。

注意事项

上述代码假定 Excel 文件为 .xlsx 格式,若为 .xls 格式,需把 XSSFWorkbook 替换成 HSSFWorkbook。

要把 filePath 替换成实际的 Excel 文件路径。

相关推荐
Xzh04231 分钟前
前后端学习的交界
java·ajax·maven·axios·测试
小龙报3 分钟前
《算法通关指南---C++编程篇(2)》
c语言·开发语言·数据结构·c++·程序人生·算法·学习方法
豆沙沙包?25 分钟前
2025年--Lc201- 378. 有序矩阵中第 K 小的元素(排序)--Java版
java·线性代数·矩阵
华仔啊28 分钟前
3 分钟让你彻底搞懂 Spring 观察者和发布者模式的本质区别
java·后端
没有bug.的程序员28 分钟前
服务治理与 API 网关:微服务流量管理的艺术
java·分布式·微服务·架构·wpf
宠友信息31 分钟前
java微服务驱动的社区平台:友猫社区的功能模块与实现逻辑
java·开发语言·微服务
Full Stack Developme1 小时前
jdk.random 包详解
java·开发语言·python
懒羊羊不懒@1 小时前
Java基础入门
java·开发语言
程序员小假2 小时前
我们来说一说 Redisson 的原理
java·后端