大家好,我是不熬夜崽崽!大家如果觉得看了本文有帮助的话,麻烦给不熬夜崽崽点个三连(点赞、收藏、关注)支持一下哈,大家的支持就是我写作的无限动力。
前言
在开发过程中,Excel 是一个常见的文件格式,不论是在导出报告,还是读取分析数据,都离不开它。今天,我将带大家一起看看如何实现一个简单高效的 Excel 操作工具类——ExcelUtils。这个工具类不仅能帮你导出 Excel,还能读取 Excel 文件、填充模板数据、设置单元格样式等。让我们通过实际的代码来了解一下这些功能,保证你用得上,且写起来简洁高效!
1. ExcelUtils 类概述
ExcelUtils 类是我们用来简化 Excel 操作的工具类。我们将用它来实现以下功能:
- 导出 Excel 文件
 - 读取 Excel 文件
 - 模板填充
 - 设置单元格样式
 
1.1 依赖库
首先,咱们需要引入 Apache POI 库来操作 Excel 文件。在 Maven 项目中,加入以下依赖:
<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>
1.2 代码框架
接下来我们来实现 ExcelUtils 类。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.List;
public class ExcelUtils {
    // 1. 导出 Excel 文件
    public static void exportExcel(List<String[]> data, String filePath) throws IOException {
        Workbook workbook = new XSSFWorkbook(); // 创建 Excel 工作簿
        Sheet sheet = workbook.createSheet("Sheet1"); // 创建工作表
        // 填充数据
        int rowIndex = 0;
        for (String[] rowData : data) {
            Row row = sheet.createRow(rowIndex++);
            int cellIndex = 0;
            for (String cellData : rowData) {
                row.createCell(cellIndex++).setCellValue(cellData);
            }
        }
        // 写入文件
        try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
            workbook.write(fileOut);
        } finally {
            workbook.close(); // 关闭工作簿
        }
    }
    // 2. 读取 Excel 文件
    public static void readExcel(String filePath) throws IOException {
        FileInputStream fis = new FileInputStream(filePath);
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
        for (Row row : sheet) {
            for (Cell cell : row) {
                System.out.print(cell.toString() + "\t");
            }
            System.out.println();
        }
        workbook.close();
        fis.close();
    }
    // 3. 模板填充
    public static void fillTemplate(String templatePath, String outputPath, List<String[]> data) throws IOException {
        FileInputStream fis = new FileInputStream(templatePath);
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
        // 填充模板数据
        int rowIndex = 1; // 假设从第二行开始填充
        for (String[] rowData : data) {
            Row row = sheet.createRow(rowIndex++);
            int cellIndex = 0;
            for (String cellData : rowData) {
                row.createCell(cellIndex++).setCellValue(cellData);
            }
        }
        // 写入输出文件
        try (FileOutputStream fileOut = new FileOutputStream(outputPath)) {
            workbook.write(fileOut);
        } finally {
            workbook.close();
            fis.close();
        }
    }
    // 4. 设置单元格样式
    public static void setCellStyle(String filePath) throws IOException {
        FileInputStream fis = new FileInputStream(filePath);
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setBold(true);
        font.setColor(IndexedColors.RED.getIndex());
        style.setFont(font);
        style.setAlignment(HorizontalAlignment.CENTER);
        // 应用样式到单元格
        for (Row row : sheet) {
            for (Cell cell : row) {
                cell.setCellStyle(style);
            }
        }
        // 写入文件
        try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
            workbook.write(fileOut);
        } finally {
            workbook.close();
            fis.close();
        }
    }
    public static void main(String[] args) throws IOException {
        // 1. 导出 Excel 示例
        List<String[]> data = List.of(
                new String[]{"ID", "Name", "Age"},
                new String[]{"1", "Alice", "24"},
                new String[]{"2", "Bob", "29"}
        );
        exportExcel(data, "exported.xlsx");
        // 2. 读取 Excel 示例
        readExcel("exported.xlsx");
        // 3. 模板填充示例
        List<String[]> templateData = List.of(
                new String[]{"Product", "Price"},
                new String[]{"Apple", "3.5"},
                new String[]{"Banana", "2.0"}
        );
        fillTemplate("template.xlsx", "filled_template.xlsx", templateData);
        // 4. 设置单元格样式示例
        setCellStyle("filled_template.xlsx");
    }
}
2. 解释与实现
2.1 导出 Excel
导出 Excel 功能的核心在于创建一个 Workbook 对象,并且通过 Sheet 和 Row 来填充数据。每一行数据通过 Row 创建,每个单元格则通过 Cell 填充内容。最后,使用 FileOutputStream 将数据写入文件。
2.2 读取 Excel
读取 Excel 文件的操作非常简单,我们可以使用 FileInputStream 打开文件,获取 Workbook,然后通过遍历 Sheet 中的每一行来获取每个单元格的内容。cell.toString() 可以获取单元格的值。
2.3 模板填充
模板填充通常用于从模板文件中读取内容,并根据实际数据进行填充。在 fillTemplate 方法中,我们首先读取模板文件,然后根据数据逐行填充到工作表中。
2.4 设置单元格样式
通过 CellStyle 和 Font,我们可以给单元格应用不同的样式。在这里,我给每个单元格设置了红色加粗的字体,并将其对齐方式设为居中。
3. 总结
  通过这个 ExcelUtils 工具类,你能够轻松实现 Excel 文件的导出、读取、模板填充以及单元格样式设置。它不仅高效,还能有效减少你手动操作 Excel 的时间成本。开发者们,如果你还在为每次 Excel 操作手动编写复杂的代码而烦恼,不妨试试这个工具类吧!










