Java Excel 读取与写入(合并单元格)

在使用 Java 进行 Excel 文件的读取和写入时,使用 Apache POI 库是一个非常普遍的做法。本文将向你展示如何在 Java 中使用 Apache POI 执行 Excel 的读取与写入操作,并实现合并单元格的功能。

流程概述

首先,我们概述一下整个流程,下面是实现步骤的表格:

步骤 描述 代码示例
1 引入 Apache POI 依赖 pom.xml 中添加依赖
2 创建工作簿和工作表 WorkbookSheet
3 写入数据 使用 RowCell
4 合并单元格 sheet.mergeCells
5 写入 Excel 文件 FileOutputStream
6 读取 Excel 文件 使用 FileInputStream

步骤详解

1. 引入 Apache POI 依赖

在 pom.xml 中添加 Apache POI 的依赖。如果你使用的是 Maven,可以使用以下依赖:

<dependencies>
    <!-- Apache POI for Excel -->
    <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>

2. 创建工作簿和工作表

接下来,我们在 Java 中创建一个工作簿和工作表。

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;

// 创建工作簿
Workbook workbook = new XSSFWorkbook(); // 使用 XSSFWorkbook 创建新的 Excel 工作簿
// 创建工作表
Sheet sheet = workbook.createSheet("Example Sheet"); // 创建一个名为“Example Sheet”的工作表

3. 写入数据

在工作表中写入数据,使用 RowCell

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;

// 创建第一行
Row row = sheet.createRow(0); // 创建第 0 行
// 创建单元格
Cell cell1 = row.createCell(0); // 创建第一个单元格
cell1.setCellValue("姓名"); // 设置单元格值
Cell cell2 = row.createCell(1); // 创建第二个单元格
cell2.setCellValue("年龄"); // 设置单元格值

// 创建第二行
Row row2 = sheet.createRow(1); // 创建第 1 行
Cell cell3 = row2.createCell(0); 
cell3.setCellValue("张三"); // 设置单元格值
Cell cell4 = row2.createCell(1);
cell4.setCellValue(30); // 设置单元格值

4. 合并单元格

对于合并单元格,我们需要使用 mergeCells 方法。

// 合并第一行的前两个单元格
sheet.addMergedRegion(new org.apache.poi.ss.util.CellRangeAddress(0, 0, 0, 1)); 
// 第一参数是起始行,第二个是结束行,第三个是起始列,第四个是结束列

5. 写入 Excel 文件

完成数据写入后,我们需要将其写入文件中。

import java.io.FileOutputStream;

// 定义输出文件
FileOutputStream fileOut = new FileOutputStream("example.xlsx"); // 定义输出的 Excel 文件名
workbook.write(fileOut); // 将数据写入文件
fileOut.close(); // 关闭文件输出流
workbook.close(); // 关闭工作簿

6. 读取 Excel 文件

现在,我们可以读取刚刚创建的 Excel 文件。

import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.WorkbookFactory;

FileInputStream fileInputStream = new FileInputStream("example.xlsx");
Workbook workbookRead = WorkbookFactory.create(fileInputStream);
Sheet sheetRead = workbookRead.getSheetAt(0); // 获取第一个工作表

// 读取数据
for (Row row : sheetRead) { // 遍历所有行
    for (Cell cell : row) { // 遍历每行中的所有单元格
        System.out.print(cell.toString() + "\t"); // 打印单元格内容
    }
    System.out.println(); // 换行
}
fileInputStream.close(); // 关闭输入流
workbookRead.close(); // 关闭工作簿

甘特图

以下是项目的甘特图,展示了我们实施过程中的主要任务和时间安排。

gantt
    title Excel 操作过程
    dateFormat  YYYY-MM-DD
    section 前期准备
    引入依赖           :a1, 2023-10-01, 1d
    section 创建工作簿
    创建工作簿和表     :a2, 2023-10-02, 1d
    section 写入数据
    写入数据           :a3, 2023-10-03, 1d
    section 合并单元格
    合并单元格         :a4, 2023-10-04, 1d
    section 输出文件
    写入 Excel 文件    :a5, 2023-10-05, 1d
    section 读取数据
    读取 Excel 文件    :a6, 2023-10-06, 1d

关系图

以下是实现过程中的数据关系图,帮助我们理解不同组件之间的关系。

erDiagram
    User {
        string name
        int age
    }
    Excel {
        string file_name
        string content
    }
    User ||--|| Excel : has

结论

通过本篇文章,相信你对如何使用 Java 和 Apache POI 杓具来实现 Excel 的读取和写入(包括合并单元格)有了更深入的理解。合并单元格可以帮助我们更好地组织和展示数据,而读取功能则使我们能够灵活地从现有文件中获取所需信息。

希望这篇文章能够帮助你顺利实现 Excel 操作的相关功能,如果你还有其他问题或需要更深入的指导,欢迎继续交流和探索。