2022-08-11 EasyPoi如何导出数据量较大的Excel

发布于:2023-01-22 ⋅ 阅读:(741) ⋅ 点赞:(0)

相信大家一定在工作工程中经历过数据量大,普通的导出已经满足不了实际需求,那么这里我给大家分享一个稍微有点用的,使用easyPoi导出数据比较大的方法

本方法是同步接口,如果导出数据量大于1048576行的,可以出门左转了,因为下列方法并不能解决这个问题,只能后台走异步导出
在这里插入图片描述

~~ 就不多BB了,直接开始~~
我项目用的gradle+jpa,所以以下就用该环境举例。

在这里插入图片描述

1.导入依赖

poi版本
	compile("cn.afterturn:easypoi-base:4.2.0")
    compile("cn.afterturn:easypoi-web:4.2.0")
    compile("cn.afterturn:easypoi-annotation:4.2.0")

2.实体类加@Excel注解

 	@ApiModelProperty("审批通过时间")
    @Excel(name = "审批通过时间", width = 16)
    private Date ApprovalsDate;

    @ApiModelProperty("是否删除")
    @Excel(name = "是否删除", width = 16 ,replace = {"是_true", "否_false"})
    private boolean isDelete;
    
    @ApiModelProperty("产品孔数")
    @Excel(name = "产品孔数", width = 16, type = 10)
    private BigDecimal wallThickness;

(注:这里我举了三个例子,小白看过来,replace可以将 _ 后面的值替换成前面的值,然后type=10是将该值导出为数字类型)

3.业务层实现IExcelExportServer 接口

这里需要重写selectListForExcelExport方法,如果是mybatis同理。

@Service
public class AdsPchAmtSumMxExclDetMqService implements IExcelExportServer {

    @Autowired
    private AdsPchAmtSumMxExclDetMqDao dao;

    @Override
    public List<Object> selectListForExcelExport(Object queryParams, int page) {
        Search search = (Search) queryParams;
        PageInfo pageInfo = new PageInfo();
        pageInfo.setPage(page);
        pageInfo.setRows(10000);
        search.setPageInfo(pageInfo);
        LogUtil.bizLog("当前是第"+page+"页,已取"+pageInfo.getRows()*(page-1)+"条数据");
        List materialResponses = dao.findByPage(search).getRows();
        return materialResponses;
    }
}

4.实际导出方法

ExcelType选择XSSF,对应excel 07的 .xlsx版本。
exportBigExcel方法这里推荐使用

public static Workbook exportBigExcel(ExportParams entity, Class<?> pojoClass,
                                          IExcelExportServer server, Object queryParams) {
        ExcelBatchExportService batchServer = new ExcelBatchExportService();
        batchServer.init(entity, pojoClass);
        return batchServer.exportBigExcel(server, queryParams);
    }

上面的这一个方法,需要传入
1.导出参数
2.导出实体的class对象
3.刚才继承IExcelExportServer 接口的业务层
4.筛选条件(这里的筛选条件就是上面重写方法里面需要用的参数)

	@Override
    public void exportDataDetail(Search search,HttpServletRequest request,HttpServletResponse response){
   			String exportName ="大数据Excel导出";
            ExportParams exportParams = new ExportParams(exportName,exportName, ExcelType.XSSF);
            Workbook workbook = ExcelExportUtil.exportBigExcel(exportParams, AdsPchAmtSumMxExclDetMq.class, adsPchAmtSumMxExclDetMqService,search);
            ExcelUtils.outputFile(request, response, workbook, exportName + ".xlsx");
    }

PS:到这里我就觉得差不多了,大家如果有什么疑问可以在下面交流哦,我哪里写的不对的地方也可以提出来共同进步!

在这里插入图片描述

夏波!夏波!

本文含有隐藏内容,请 开通VIP 后查看