读取本地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 文件路径。

相关推荐
小卡车55512 分钟前
java反射、自定义注解的应用(自定义分页)
java
码完就睡32 分钟前
数据结构——红黑树
数据结构
码爸41 分钟前
数据结构详细介绍
数据结构
BLUcoding1 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
yuniko-n1 小时前
【JUC】Lock 和 synchronzied 锁
java
西柚小萌新1 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
北极有牛1 小时前
cpp学习笔记--常量指针
java·开发语言·算法
java资料站2 小时前
二、Spring AI Alibaba · ChatModel
java·windows·spring
十年Java程序媛2 小时前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
caoerzhong2 小时前
JeeWMS 开源 WMS 部署避坑指南:Java 仓库管理系统的环境基线、四类根因与可复现交付
java·开发语言·开源