杰瑞科技汇

Java如何导出Excel 2007?

Java 导出 Excel 2007 (xlsx) 完整指南

在 Java 中导出 Excel 2007 (.xlsx) 格式文件,最常用的库是 Apache POI,以下是详细的实现方法:

Java如何导出Excel 2007?-图1
(图片来源网络,侵删)

添加依赖

在你的项目中添加 Apache POI 的依赖(Maven):

<dependencies>
    <!-- Apache POI 核心依赖 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version>
    </dependency>
    <!-- Apache POI OOXML 支持 (用于 .xlsx 格式) -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <!-- 对于 XML 处理 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-lite</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

基本导出示例

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelExportExample {
    public static void main(String[] args) {
        // 1. 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        // 2. 创建工作表
        Sheet sheet = workbook.createSheet("员工信息");
        // 3. 创建表头
        Row headerRow = sheet.createRow(0);
        String[] headers = {"ID", "姓名", "年龄", "部门", "入职日期"};
        for (int i = 0; i < headers.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]);
        }
        // 4. 添加示例数据
        Object[][] data = {
            {1, "张三", 28, "技术部", "2025-01-15"},
            {2, "李四", 32, "市场部", "2025-03-22"},
            {3, "王五", 26, "人事部", "2025-07-10"}
        };
        for (int i = 0; i < data.length; i++) {
            Row row = sheet.createRow(i + 1);
            for (int j = 0; j < data[i].length; j++) {
                Cell cell = row.createCell(j);
                if (data[i][j] instanceof String) {
                    cell.setCellValue((String) data[i][j]);
                } else if (data[i][j] instanceof Integer) {
                    cell.setCellValue((Integer) data[i][j]);
                } else if (data[i][j] instanceof Double) {
                    cell.setCellValue((Double) data[i][j]);
                }
            }
        }
        // 5. 自动调整列宽
        for (int i = 0; i < headers.length; i++) {
            sheet.autoSizeColumn(i);
        }
        // 6. 写入文件
        try (FileOutputStream outputStream = new FileOutputStream("员工信息.xlsx")) {
            workbook.write(outputStream);
            System.out.println("Excel 文件已成功生成!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

高级功能示例

1 添加样式

// 创建样式
CellStyle headerStyle = workbook.createCellStyle();
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerStyle.setFont(headerFont);
headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 应用表头样式
for (int i = 0; i < headers.length; i++) {
    headerRow.getCell(i).setCellStyle(headerStyle);
}

2 添加日期格式

// 创建日期格式
CellStyle dateStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-mm-dd"));
// 应用日期格式
Cell dateCell = row.createCell(4);
dateCell.setCellValue(new Date()); // 当前日期
dateCell.setCellStyle(dateStyle);

3 添加公式

// 添加汇总行
Row summaryRow = sheet.createRow(data.length + 1);
summaryRow.createCell(0).setCellValue("总计");
summaryRow.createCell(2).setCellFormula("SUM(C2:C" + (data.length + 1) + ")");

使用模板导出

如果需要基于模板导出,可以使用以下方法:

// 读取模板文件
try (InputStream templateStream = new FileInputStream("template.xlsx")) {
    Workbook workbook = new XSSFWorkbook(templateStream);
    Sheet sheet = workbook.getSheet("Sheet1");
    // 修改模板中的数据
    Row row = sheet.getRow(1);
    row.getCell(1).setCellValue("新数据");
    // 保存修改后的文件
    try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
        workbook.write(outputStream);
    }
}

大数据量处理优化

对于大数据量导出,建议使用 SXSSFWorkbook(流式 API):

import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.streaming.SXSSFSheet;
// 创建 SXSSFWorkbook (默认在内存中保留 100 行,其余写入临时文件)
Workbook workbook = new SXSSFWorkbook(100);
Sheet sheet = workbook.createSheet("大数据");
// 添加数据...
// 注意: 不能使用 sheet.getRow() 或 sheet.createRow() 超出保留行数
// 写入文件
try (FileOutputStream outputStream = new FileOutputStream("大数据.xlsx")) {
    workbook.write(outputStream);
} finally {
    // 清理临时文件
    ((SXSSFWorkbook) workbook).dispose();
}

注意事项

  1. 内存管理:处理大数据量时,使用 SXSSFWorkbook 避免内存溢出
  2. 样式重用:尽量重用样式对象,减少内存占用
  3. 关闭资源:确保所有 Workbook 和 OutputStream 都被正确关闭
  4. 日期处理:注意日期格式的正确应用
  5. 路径问题:确保输出目录存在且有写入权限

就是在 Java 中导出 Excel 2007 (.xlsx) 文件的完整指南,你可以根据实际需求调整和扩展这些代码。

Java如何导出Excel 2007?-图2
(图片来源网络,侵删)
Java如何导出Excel 2007?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇