EasyPoi如何导出数据量较大的Excel
相信大家一定在工作工程中经历过数据量大,普通的导出已经满足不了实际需求,那么这里我给大家分享一个稍微有点用的,使用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 后查看