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

发布于:2025-02-14 ⋅ 阅读:(80) ⋅ 点赞:(0)

在 pom.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。
示例代码

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 文件路径。


网站公告

今日签到

点亮在社区的每一天
去签到