使用Java操作Excel - 实现Excel中的插入新行

在现代软件开发中,处理Excel文件是一个相对常见的需求。例如,我们可能需要从数据库中提取数据并将其导出到Excel文件,或者在现有Excel文件中添加新数据。在这篇文章中,我们将依次介绍如何在Excel文件的下一行插入数据。

流程概述

在开始之前,我们先来看看整个过程的步骤。以下是实现向Excel文件插入数据的总体流程:

步骤 描述
1 设置环境,添加依赖库
2 创建Excel文件或打开已有Excel文件
3 定位到需要插入新数据的行
4 插入数据到新的行中
5 保存Excel文件
6 关闭Excel文件

接下来,我们将详细介绍每一步的具体实现。

第一步:设置环境,添加依赖库

在Java中,我们常用Apache POI库来处理Excel文件。首先,我们需要在项目中添加Apache POI的依赖。如果你使用的是Maven,可以将以下代码添加到你的 pom.xml 文件中:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

这行代码的作用是告诉Maven下载Apache POI的最新版本。

第二步:创建Excel文件或打开已有Excel文件

我们将编写代码来创建一个新的Excel文件或打开一个已存在的文件。以下是实现这一功能的代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class ExcelHelper {
    
    private Workbook workbook;
    private Sheet sheet;

    // 构造方法:创建或打开Excel文件
    public ExcelHelper(String filePath) throws IOException {
        // 尝试打开已有文件
        try (FileInputStream fileInputStream = new FileInputStream(filePath)) {
            workbook = new XSSFWorkbook(fileInputStream);
        } catch (IOException e) {
            // 如果文件不存在,创建新的Workbook和Sheet
            workbook = new XSSFWorkbook();
            sheet = workbook.createSheet("Sheet1");
        }
    }
}

上面的ExcelHelper类负责创建或打开Excel文件。在构造方法中,我们尝试读取一个现有的Excel文件;如果文件不存在,它将创建一个新的Excel文件和工作表。

第三步:定位到需要插入新数据的行

现在我们需要找到Excel文件的最后一行,以便在其后面插入新行。以下是实现这一过程的代码:

    // 查找最后一行的索引
    public int getLastRowIndex() {
        sheet = workbook.getSheetAt(0); // 获取第一个工作表
        return sheet.getPhysicalNumberOfRows(); // 返回最后一行的索引
    }

这里我们通过调用getPhysicalNumberOfRows()方法找到了当前工作表的最后一行索引。

第四步:插入数据到新的行中

在定位到最后一行后,我们可以创建一个新行并向其中添加数据。以下是插入数据的代码:

    // 插入新行并写入数据
    public void insertRow(int rowIndex, String[] data) {
        Row newRow = sheet.createRow(rowIndex); // 创建新行
        for (int i = 0; i < data.length; i++) {
            Cell cell = newRow.createCell(i); // 创建单元格
            cell.setCellValue(data[i]); // 设置单元格的值
        }
    }

insertRow方法中,我们创建了新行并在其中填充传入的数据数组。

第五步:保存Excel文件

在插入数据后,我们需要保存Excel文件。感谢Apache POI,这也非常简单:

    // 保存Excel文件
    public void save(String filePath) throws IOException {
        try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {
            workbook.write(fileOutputStream); // 写入工作簿数据
        }
    }

这段代码使用FileOutputStream将修改后的工作簿写入文件。

第六步:关闭Excel文件

最后,我们需要妥善关闭Excel文件,释放资源。可以在类中添加一个方法来关闭工作簿:

    // 关闭工作簿
    public void close() throws IOException {
        workbook.close(); // 关闭工作簿
    }
}

完整的示例

下面我们将把所有代码结合在一起,形成一个完整的Excel操作示例。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class ExcelHelper {
    
    private Workbook workbook;
    private Sheet sheet;

    public ExcelHelper(String filePath) throws IOException {
        try (FileInputStream fileInputStream = new FileInputStream(filePath)) {
            workbook = new XSSFWorkbook(fileInputStream);
        } catch (IOException e) {
            workbook = new XSSFWorkbook();
            sheet = workbook.createSheet("Sheet1");
        }
    }

    public int getLastRowIndex() {
        sheet = workbook.getSheetAt(0);
        return sheet.getPhysicalNumberOfRows();
    }

    public void insertRow(int rowIndex, String[] data) {
        Row newRow = sheet.createRow(rowIndex);
        for (int i = 0; i < data.length; i++) {
            Cell cell = newRow.createCell(i);
            cell.setCellValue(data[i]);
        }
    }

    public void save(String filePath) throws IOException {
        try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {
            workbook.write(fileOutputStream);
        }
    }

    public void close() throws IOException {
        workbook.close();
    }

    public static void main(String[] args) {
        try {
            ExcelHelper excelHelper = new ExcelHelper("test.xlsx");
            int lastRowIndex = excelHelper.getLastRowIndex();
            String[] data = {"新数据1", "新数据2", "新数据3"};
            excelHelper.insertRow(lastRowIndex, data);
            excelHelper.save("test.xlsx");
            excelHelper.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结尾

通过这篇文章,我们介绍了如何使用Java和Apache POI库在Excel文件中插入数据。我们详细解析了实现过程中每一步的代码与思路,并且演示了一个完整的示例程序。希望这能帮助你在未来的工作中高效地处理Excel文件,如果你在实际操作中遇到问题,欢迎向我提问。最后,祝你在学习Java的路上越走越远!