Java如何導(dǎo)出包含多個Sheet的Excel文件
在 Java 中導(dǎo)出包含多個 Sheet 的 Excel 文件,可以使用 Apache POI 或 EasyExcel(阿里開源庫)。以下是兩種方法的詳細(xì)實現(xiàn):
方法 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. 創(chuàng)建工作簿(.xlsx 格式) Workbook workbook = new XSSFWorkbook(); // 2. 創(chuàng)建第一個 Sheet(學(xué)生信息) Sheet studentSheet = workbook.createSheet("學(xué)生表"); // 添加表頭 Row headerRow = studentSheet.createRow(0); headerRow.createCell(0).setCellValue("學(xué)號"); headerRow.createCell(1).setCellValue("姓名"); headerRow.createCell(2).setCellValue("成績"); // 添加數(shù)據(jù) addStudentData(studentSheet); // 3. 創(chuàng)建第二個 Sheet(課程信息) Sheet courseSheet = workbook.createSheet("課程表"); // 添加表頭 Row courseHeader = courseSheet.createRow(0); courseHeader.createCell(0).setCellValue("課程ID"); courseHeader.createCell(1).setCellValue("課程名稱"); // 添加數(shù)據(jù) addCourseData(courseSheet); // 4. 導(dǎo)出到文件 try (FileOutputStream fos = new FileOutputStream("multi_sheet_example.xlsx")) { workbook.write(fos); System.out.println("Excel 導(dǎo)出成功!"); } 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", "高等數(shù)學(xué)"}, {"C002", "大學(xué)英語"}, {"C003", "計算機(jī)基礎(chǔ)"} }; 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(推薦大數(shù)據(jù)量導(dǎo)出)
1. 添加 Maven 依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.3.2</version> </dependency>
2. 定義數(shù)據(jù)模型
import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class Student { @ExcelProperty("學(xué)號") 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 導(dǎo)出實現(xiàn)
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. 準(zhǔn)備數(shù)據(jù) 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", "高等數(shù)學(xué)")); courses.add(new Course("C002", "大學(xué)英語")); // 2. 導(dǎo)出到Excel String fileName = "multi_sheet_easyexcel.xlsx"; try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) { // 第一個Sheet:學(xué)生數(shù)據(jù) WriteSheet studentSheet = EasyExcel.writerSheet(0, "學(xué)生信息") .head(Student.class) .build(); excelWriter.write(students, studentSheet); // 第二個Sheet:課程數(shù)據(jù) WriteSheet courseSheet = EasyExcel.writerSheet(1, "課程信息") .head(Course.class) .build(); excelWriter.write(courses, courseSheet); } System.out.println("EasyExcel 導(dǎo)出成功!"); } }
兩種方法對比
特性 | Apache POI | EasyExcel |
---|---|---|
適用場景 | 需要精細(xì)控制Excel樣式和功能 | 大數(shù)據(jù)量導(dǎo)出(百萬行級) |
內(nèi)存占用 | 較高(全內(nèi)存操作) | 低(流式寫入) |
API復(fù)雜度 | 較復(fù)雜 | 簡單易用 |
性能 | 處理小文件快 | 處理大文件性能優(yōu)異 |
功能 | 支持所有Excel特性 | 專注數(shù)據(jù)導(dǎo)出,樣式支持有限 |
最佳實踐建議
- 小數(shù)據(jù)量+復(fù)雜樣式 → 選擇 Apache POI
- 大數(shù)據(jù)量導(dǎo)出 → 選擇 EasyExcel
- 需要兼容舊版Excel(.xls) → 使用 POI 的
HSSFWorkbook
兩種方式均可實現(xiàn)多Sheet導(dǎo)出,根據(jù)項目需求選擇即可!
到此這篇關(guān)于Java如何導(dǎo)出包含多個Sheet的Excel文件的文章就介紹到這了,更多相關(guān)Java導(dǎo)出Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟
最近做了個項目,想要轉(zhuǎn)換成可執(zhí)行文件,那么java項目如何導(dǎo)出為.exe執(zhí)行文件,本文就介紹一下,主要使用jar2exe軟件,感興趣的可以了解一下2021-05-05spring aop底層源碼執(zhí)行邏輯剖析(源碼解析)
這篇文章主要介紹了spring aop底層源碼執(zhí)行邏輯剖析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-08-08SpringBoot 使用@WebMvcTest測試MVC Web Controller
這篇文章主要介紹了SpringBoot 使用@WebMvcTest測試MVC Web Controller,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11淺析 ArrayList 和 LinkedList 有什么區(qū)別
ArrayList 和 LinkedList 有什么區(qū)別,是面試官非常喜歡問的一個問題。今天通過本文給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧2020-10-10Springboot集成Proguard生成混淆jar包方式
本文介紹了兩種Java代碼混淆工具:ClassFinal和ProGuard,ClassFinal是一個字節(jié)碼加密工具,但需要額外的加密包,使用復(fù)雜,ProGuard是一款開源的Java代碼混淆工具,可以有效地提高代碼的安全性,但對Spring框架的注解處理不夠完善2024-11-11