async-excel实现多sheet异步导出方法详解
起风哥 人气:0业务上如果需要单sheet导出,有时有需要将多个单sheet导出合并到一个excel里面此时,代码写起来也是颇为蛋碎,但是在async-excel中,你可以不改变原有任何逻辑,只需要在增加一个简单的controller方法即可
具体代码如下:
@RequestMapping("/exports") public Long exports() { DataExportParam<Oplog> param = new DataExportParam<>(); param.setExportFileName("导出测试"); param.setLimit(2); //多个sheet导出时,行数计算为所有sheet的总行数,顺序为传入数据组的顺序 Long taskId = excelService .doExport(param, OplogExportHandle.class, OplogExportHandleA.class); return taskId; }
不同参数如何处理?
DataExportParam 内部携带了个map,你可以自由传参,在不同的handler中可以按需获取
sheet1
@ExcelHandle public class OplogExportHandle implements ExportHandler<OplogExportModel> { @Autowired IOplogService oplogService; @Override public void init(ExcelContext context, DataParam param) { ExportContext ctx = (ExportContext) context; //此处的sheetNo会被覆盖,为了兼容多sheet WriteSheet sheet = EasyExcel.writerSheet(0, "第一个sheet").head(OplogExportModel.class).build(); ctx.setWriteSheet(sheet); } @Override public void beforePerPage(ExportContext ctx, DataExportParam param) { //每页开始处理前 } @Override public ExportPage<OplogExportModel> exportData(int startPage, int limit, DataExportParam param) { //你的业务逻辑 return result; } }
sheet2
@ExcelHandle public class OplogExportHandleA implements ExportHandler<OplogExportModel> { @Autowired IOplogService oplogService; @Override public void init(ExcelContext context, DataParam param) { ExportContext ctx = (ExportContext) context; //此处的sheetNo会被覆盖,为了兼容一个文件多sheet导出 WriteSheet sheet = EasyExcel.writerSheet(0, "第二个sheet").head(OplogExportModel.class).build(); ctx.setWriteSheet(sheet); } @Override public ExportPage<OplogExportModel> exportData(int startPage, int limit, DataExportParam param) { //你的业务逻辑 return result; } }
效果如下
加载全部内容