当前位置: 代码网 > it编程>编程语言>Java > Java如何导出包含多个Sheet的Excel文件

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

2025年07月03日 Java 我要评论
在 java 中导出包含多个 sheet 的 excel 文件,可以使用 apache poi 或 easyexcel(阿里开源库)。以下是两种方法的详细实现:方法 1:使用 apache poi(支

在 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com