开发者

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

目录
  • 方法 1:使用 Apache POI(支持 .xls 和 .xlsx)
    • 1. 添加 Maven 依赖
    • 2. 完整代码示例
  • 方法 2:使用 EasyExcel(推荐大数据量导出)
    • 1. 添加 Maven 依赖
    • 2. 定义数据模型
    • 3. 多 Sheet 导出实现
  • 两种方法对比
    • 最佳实践建议

      在 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);
                  yoDRrJafor (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[][] javascriptcourseData = {
                  {"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;
          @ExcelPropehttp://www.devze.comrty("成绩")
          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. 导出到Excandroidel
              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(androidCourse.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内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜