Java中POI读取Excel数据

在Java开发中,我们经常需要读取和操作Excel文件中的数据。Apache POI是一个流行的Java库,可以用于读取、写入和操作各种类型的Office文档,包括Excel。本文将介绍如何使用POI库在Java中读取Excel数据,并提供代码示例。

了解Apache POI

Apache POI是一个开源的Java库,用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。POI提供了一组API,可以轻松地创建、读取、修改和写入这些文件。在本文中,我们将重点介绍POI的Excel部分。

准备工作

首先,我们需要在项目中添加POI的依赖。可以通过Maven或手动下载POI的JAR文件并添加到项目的类路径中。下面是使用Maven添加POI依赖的示例:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

使用POI读取Excel数据

在开始之前,我们需要准备一个Excel文件作为示例数据。假设我们有一个名为"example.xlsx"的Excel文件,其中包含一个名为"Sheet1"的工作表,包含姓名、年龄和性别等列。

首先,我们需要创建一个File对象来表示要读取的Excel文件。然后,我们可以使用WorkbookFactory类的create()方法加载工作簿。下面是读取Excel文件并加载工作簿的代码示例:

import org.apache.poi.ss.usermodel.*;

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

public class ExcelReader {
    public static void main(String[] args) {
        try {
            File file = new File("example.xlsx");
            FileInputStream fis = new FileInputStream(file);

            Workbook workbook = WorkbookFactory.create(fis);

            // 读取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);

            // 遍历工作表中的每一行
            for (Row row : sheet) {
                // 读取每一行中的每一列
                for (Cell cell : row) {
                    // 根据单元格类型读取数据
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        default:
                            System.out.print("\t");
                    }
                }
                System.out.println();
            }

            workbook.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码首先创建了一个File对象,表示要读取的Excel文件。然后,使用FileInputStream读取文件内容。接下来,使用WorkbookFactory加载工作簿,并通过getSheetAt()方法获取第一个工作表。然后,通过遍历工作表的行和列,我们可以读取单元格中的数据,并根据单元格类型进行处理。

在上述示例中,我们使用了switch语句根据单元格类型打印数据。对于字符串类型的单元格,我们使用getStringCellValue()方法;对于数字类型的单元格,我们使用getNumericCellValue()方法;对于布尔类型的单元格,我们使用getBooleanCellValue()方法。

序列图

下面是读取Excel数据的序列图,使用Mermaid语法绘制:

sequenceDiagram
    participant User
    participant Program
    participant Excel

    User->>Program: 启动程序
    Program->>Excel: 加载Excel文件
    Excel-->>Program: 返回工作簿
    Program->>Excel: 获取工作表
    Excel-->>Program: 返回工作表
    Program->>Excel: 遍历行和列
    Excel-->>Program: 返回单元格数据
    Program->>User: 打印数据
    Program->>Excel: 关闭工作簿
    Excel-->>Program: 关闭成功
    Program->>Excel: 关闭文件流
    Excel-->>Program: 文件流关闭成功
    Program->>User: 程序结束

上述序列图展示了用户启动程序后,程序加载Excel文件并获取工作表。然后,程序遍