亲宝软件园·资讯

展开

async-excel实现多sheet异步导出方法详解

起风哥 人气:0

async-excel组件开源地址

业务上如果需要单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;
    }
}

效果如下

加载全部内容

相关教程
猜你喜欢
用户评论