EasyExcel

百万Excel数据导出如何实现

查询数据时分页查,写入多个sheet页

看多线程

导出慢的话,改成异步,用户不需要等待,生成完成,用户点击按钮下载即可

百万Excel数据导入如何实现

Easy Excel基于事件流,一行一行读

内存占留的记录也不要太多,分批插入数据库

使用 .csv 文件代替 .xlsx:CSV 文件结构简单,解析更快,占内存更小

避免一次上传过大的 Excel(分批上传)

异步上传,先保存到对象存储服务器,消费者根据实际情况拉取进行处理

读多个sheet页?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
InputStream inputStream = new FileInputStream("your_excel_file.xlsx");

ExcelReader excelReader = EasyExcel.read(inputStream).build();

ReadSheet sheet1 = EasyExcel.readSheet(0)
.head(StudentData.class)
.registerReadListener(new StudentDataListener())
.build();

ReadSheet sheet2 = EasyExcel.readSheet(1)
.head(ScoreData.class)
.registerReadListener(new ScoreDataListener())
.build();

excelReader.read(sheet1, sheet2);

excelReader.finish();

合并单元格

1
2
3
4
5
6
7
8
9
10

//定义一个Handler去继承CellWriteHandler 重写里面的afterSheetCreate
@Override
public void afterSheetCreate(){

}
EasyExcel.write("学生信息.xlsx", StudentData.class)
.registerWriteHandler(new MergeSameCellHandler(0)) // 合并“班级”列(第0列)
.sheet("学生表")
.doWrite(list);