杰瑞科技汇

Java如何写入Excel文件?

Java 写入 Excel 文件

在 Java 中写入 Excel 文件,有几种常用的库可以使用,其中最流行的是 Apache POI 和 EasyExcel,下面我将分别介绍这两种方法。

Java如何写入Excel文件?-图1
(图片来源网络,侵删)

使用 Apache POI

Apache POI 是 Java 操作 Office 文件最常用的库。

添加依赖

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>

Gradle:

implementation 'org.apache.poi:poi:5.2.3'
implementation 'org.apache.poi:poi-ooxml:5.2.3'

示例代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelWriterWithPOI {
    public static void main(String[] args) {
        // 创建一个新的工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建一个工作表
        Sheet sheet = workbook.createSheet("员工信息");
        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("姓名");
        headerRow.createCell(1).setCellValue("年龄");
        headerRow.createCell(2).setCellValue("部门");
        // 创建数据行
        Row dataRow1 = sheet.createRow(1);
        dataRow1.createCell(0).setCellValue("张三");
        dataRow1.createCell(1).setCellValue(28);
        dataRow1.createCell(2).setCellValue("技术部");
        Row dataRow2 = sheet.createRow(2);
        dataRow2.createCell(0).setCellValue("李四");
        dataRow2.createCell(1).setCellValue(32);
        dataRow2.createCell(2).setCellValue("市场部");
        // 自动调整列宽
        for (int i = 0; i < 3; i++) {
            sheet.autoSizeColumn(i);
        }
        // 写入文件
        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();
            }
        }
    }
}

使用 EasyExcel

EasyExcel 是阿里巴巴开源的 Excel 处理框架,相比 POI 更简单易用,内存占用更小。

Java如何写入Excel文件?-图2
(图片来源网络,侵删)

添加依赖

Maven:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.1</version>
</dependency>

Gradle:

implementation 'com.alibaba:easyexcel:3.1.1'

示例代码

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExcelWriterWithEasyExcel {
    public static void main(String[] args) {
        // 准备数据
        List<User> dataList = new ArrayList<>();
        dataList.add(new User("张三", 28, "技术部"));
        dataList.add(new User("李四", 32, "市场部"));
        dataList.add(new User("王五", 25, "财务部"));
        // 写入文件
        String fileName = "员工信息_EasyExcel.xlsx";
        // 创建Excel写入器
        ExcelWriter excelWriter = EasyExcel.write(fileName).build();
        // 创建写入表
        WriteSheet writeSheet = EasyExcel.writerSheet("员工信息").build();
        // 写入数据
        excelWriter.write(dataList, writeSheet);
        // 关闭写入器
        if (excelWriter != null) {
            excelWriter.finish();
        }
        System.out.println("Excel 文件已成功创建!");
    }
    // 数据模型类
    public static class User {
        private String name;
        private Integer age;
        private String department;
        public User() {}
        public User(String name, Integer age, String department) {
            this.name = name;
            this.age = age;
            this.department = department;
        }
        // getter和setter方法
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
        public Integer getAge() { return age; }
        public void setAge(Integer age) { this.age = age; }
        public String getDepartment() { return department; }
        public void setDepartment(String department) { this.department = department; }
    }
}

高级功能示例

使用 POI 设置样式

// 创建单元格样式
CellStyle headerStyle = workbook.createCellStyle();
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerStyle.setFont(headerFont);
headerStyle.setAlignment(HorizontalAlignment.CENTER);
// 应用样式到表头
for (Cell cell : headerRow) {
    cell.setCellStyle(headerStyle);
}

使用 EasyExcel 处理大数据量

// 监听器方式处理大数据量
EasyExcel.read("input.xlsx", User.class, new UserExcelListener()).sheet().doRead();
// 分批写入大数据量
List<User> data = new ArrayList<>();
// 填充数据...
ExcelWriter excelWriter = EasyExcel.write("output.xlsx").build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.write(data, writeSheet);
excelWriter.finish();

注意事项

  1. 文件格式:POI 支持 .xls (旧版) 和 .xlsx (新版) 格式,EasyExcel 主要支持 .xlsx
  2. 内存管理:对于大数据量,EasyExcel 的内存占用更小,推荐使用
  3. 异常处理:确保正确关闭资源,使用 try-with-resources 或 finally 块
  4. 性能优化:对于大数据量,考虑使用 SXSSFWorkbook (POI) 或分批写入 (EasyExcel)

选择哪种库取决于你的具体需求,如果只是简单的 Excel 操作,POI 足够用;如果处理大数据量或需要更好的性能,EasyExcel 是更好的选择。

分享:
扫描分享到社交APP
上一篇
下一篇