在 java 中导出包含多个 sheet 的 excel 文件,可以使用 apache poi 或 easyexcel(阿里开源库)。以下是两种方法的详细实现:
方法 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 poi | easyexcel |
|---|---|---|
| 适用场景 | 需要精细控制excel样式和功能 | 大数据量导出(百万行级) |
| 内存占用 | 较高(全内存操作) | 低(流式写入) |
| api复杂度 | 较复杂 | 简单易用 |
| 性能 | 处理小文件快 | 处理大文件性能优异 |
| 功能 | 支持所有excel特性 | 专注数据导出,样式支持有限 |
最佳实践建议
- 小数据量+复杂样式 → 选择 apache poi
- 大数据量导出 → 选择 easyexcel
- 需要兼容旧版excel(.xls) → 使用 poi 的
hssfworkbook
两种方式均可实现多sheet导出,根据项目需求选择即可!
到此这篇关于java如何导出包含多个sheet的excel文件的文章就介绍到这了,更多相关java导出excel内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论