Java如何导出包含多个Sheet的Excel文件

 更新时间:2025年07月03日 15:25:10   作者:思静鱼  
这篇文章主要为大家详细介绍了Java如何导出包含多个Sheet的Excel文件,文中一共介绍了两种实现方法,有需要的小伙伴可以跟随小编一起学习一下

在 Java 中导出包含多个 Sheet 的 Excel 文件,可以使用 Apache POIEasyExcel(阿里开源库)。以下是两种方法的详细实现:

方法 1:使用 Apache POI(支持 .xls 和 .xlsx)

1. 添加 Maven 依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version> <!-- 处理 .xls -->
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version> <!-- 处理 .xlsx -->
</dependency>

2. 完整代码示例

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

public class MultiSheetExcelExport {

    public static void main(String[] args) {
        // 1. 创建工作簿(.xlsx 格式)
        Workbook workbook = new XSSFWorkbook();

        // 2. 创建第一个 Sheet(学生信息)
        Sheet studentSheet = workbook.createSheet("学生表");
        // 添加表头
        Row headerRow = studentSheet.createRow(0);
        headerRow.createCell(0).setCellValue("学号");
        headerRow.createCell(1).setCellValue("姓名");
        headerRow.createCell(2).setCellValue("成绩");
        // 添加数据
        addStudentData(studentSheet);

        // 3. 创建第二个 Sheet(课程信息)
        Sheet courseSheet = workbook.createSheet("课程表");
        // 添加表头
        Row courseHeader = courseSheet.createRow(0);
        courseHeader.createCell(0).setCellValue("课程ID");
        courseHeader.createCell(1).setCellValue("课程名称");
        // 添加数据
        addCourseData(courseSheet);

        // 4. 导出到文件
        try (FileOutputStream fos = new FileOutputStream("multi_sheet_example.xlsx")) {
            workbook.write(fos);
            System.out.println("Excel 导出成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void addStudentData(Sheet sheet) {
        Object[][] studentData = {
            {1001, "张三", 85},
            {1002, "李四", 92},
            {1003, "王五", 78}
        };
        for (int i = 0; i < studentData.length; i++) {
            Row row = sheet.createRow(i + 1);
            for (int j = 0; j < studentData[i].length; j++) {
                Cell cell = row.createCell(j);
                if (studentData[i][j] instanceof String) {
                    cell.setCellValue((String) studentData[i][j]);
                } else if (studentData[i][j] instanceof Integer) {
                    cell.setCellValue((Integer) studentData[i][j]);
                }
            }
        }
    }

    private static void addCourseData(Sheet sheet) {
        Object[][] courseData = {
            {"C001", "高等数学"},
            {"C002", "大学英语"},
            {"C003", "计算机基础"}
        };
        for (int i = 0; i < courseData.length; i++) {
            Row row = sheet.createRow(i + 1);
            for (int j = 0; j < courseData[i].length; j++) {
                row.createCell(j).setCellValue(courseData[i][j].toString());
            }
        }
    }
}

方法 2:使用 EasyExcel(推荐大数据量导出)

1. 添加 Maven 依赖

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

2. 定义数据模型

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class Student {
    @ExcelProperty("学号")
    private Integer id;
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("成绩")
    private Integer score;
}

@Data
public class Course {
    @ExcelProperty("课程ID")
    private String courseId;
    @ExcelProperty("课程名称")
    private String courseName;
}

3. 多 Sheet 导出实现

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.ArrayList;
import java.util.List;

public class EasyExcelMultiSheetExport {

    public static void main(String[] args) {
        // 1. 准备数据
        List<Student> students = new ArrayList<>();
        students.add(new Student(1001, "张三", 85));
        students.add(new Student(1002, "李四", 92));

        List<Course> courses = new ArrayList<>();
        courses.add(new Course("C001", "高等数学"));
        courses.add(new Course("C002", "大学英语"));

        // 2. 导出到Excel
        String fileName = "multi_sheet_easyexcel.xlsx";
        try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) {
            
            // 第一个Sheet:学生数据
            WriteSheet studentSheet = EasyExcel.writerSheet(0, "学生信息")
                    .head(Student.class)
                    .build();
            excelWriter.write(students, studentSheet);

            // 第二个Sheet:课程数据
            WriteSheet courseSheet = EasyExcel.writerSheet(1, "课程信息")
                    .head(Course.class)
                    .build();
            excelWriter.write(courses, courseSheet);
        }
        System.out.println("EasyExcel 导出成功!");
    }
}

两种方法对比

特性Apache POIEasyExcel
适用场景需要精细控制Excel样式和功能大数据量导出(百万行级)
内存占用较高(全内存操作)低(流式写入)
API复杂度较复杂简单易用
性能处理小文件快处理大文件性能优异
功能支持所有Excel特性专注数据导出,样式支持有限

最佳实践建议

  • 小数据量+复杂样式 → 选择 Apache POI
  • 大数据量导出 → 选择 EasyExcel
  • 需要兼容旧版Excel(.xls) → 使用 POI 的 HSSFWorkbook

两种方式均可实现多Sheet导出,根据项目需求选择即可!

到此这篇关于Java如何导出包含多个Sheet的Excel文件的文章就介绍到这了,更多相关Java导出Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Java手写一个简易的lombok的示例代码

    利用Java手写一个简易的lombok的示例代码

    Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一系列注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象。本文就来手写一个简易的lombok,需要的可以参考一下
    2022-10-10
  • 使用新版Maven-mvnd快速构建项目

    使用新版Maven-mvnd快速构建项目

    本文主要介绍了使用新版Maven-mvnd来快速构建项目,相比于Maven,mvnd可以显著提高构建速度,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • java项目导出为.exe执行文件的方法步骤

    java项目导出为.exe执行文件的方法步骤

    最近做了个项目,想要转换成可执行文件,那么java项目如何导出为.exe执行文件,本文就介绍一下,主要使用jar2exe软件,感兴趣的可以了解一下
    2021-05-05
  • spring aop底层源码执行逻辑剖析(源码解析)

    spring aop底层源码执行逻辑剖析(源码解析)

    这篇文章主要介绍了spring aop底层源码执行逻辑剖析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • java 取交集方法retainAll的实现

    java 取交集方法retainAll的实现

    这篇文章主要介绍了java 取交集方法retainAll的实现操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java迭代子模式详解

    java迭代子模式详解

    这篇文章主要为大家详细介绍了java迭代子模式的相关资料,需要的朋友可以参考下
    2016-02-02
  • SpringBoot 使用@WebMvcTest测试MVC Web Controller

    SpringBoot 使用@WebMvcTest测试MVC Web Controller

    这篇文章主要介绍了SpringBoot 使用@WebMvcTest测试MVC Web Controller,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • JMX监控的具体使用

    JMX监控的具体使用

    JMX最常见的场景是监控Java程序的基本信息和运行情况,本文主要介绍了JMX监控的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 浅析 ArrayList 和 LinkedList 有什么区别

    浅析 ArrayList 和 LinkedList 有什么区别

    ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题。今天通过本文给大家详细介绍下,感兴趣的朋友跟随小编一起看看吧
    2020-10-10
  • Springboot集成Proguard生成混淆jar包方式

    Springboot集成Proguard生成混淆jar包方式

    本文介绍了两种Java代码混淆工具:ClassFinal和ProGuard,ClassFinal是一个字节码加密工具,但需要额外的加密包,使用复杂,ProGuard是一款开源的Java代码混淆工具,可以有效地提高代码的安全性,但对Spring框架的注解处理不够完善
    2024-11-11

最新评论