qwqe

//大前提,很重要!!假设导出的Excel数据是List<A> aList
//下面代码,我类 统一用A代替,需要导出的原数据用aList代替

//分别是 totalPage是总页数,pageSize 页码长度
int totalPage = (aList.size() / 10000) + 1;
int pageSize = 10000;
String fileName=”文件名“;
ExportParams exportParams = new ExportParams();
Workbook workbook = null;
workbook = ExcelExportUtil.exportBigExcel(exportParams, A.class, new IExcelExportServer() {
/**
* obj 就是下面的totalPage,限制条件
* page 是页数,他是在分页进行文件转换,page每次+1
*/
@Override
public List<Object> selectListForExcelExport(Object obj, int page) {

//很重要!!这里面整个方法体,其实就是将所有的数据aList分批返回处理
//分批的方式很多,我直接用了subList。然后 每批不能太大。我试了30000一批,
//内存溢出,貌似 最大每批10000


if (page > totalPage) {
return null;
}

// fromIndex开始索引,toIndex结束索引
int fromIndex = (page - 1) * pageSize;
int toIndex = page != totalPage ? fromIndex + pageSize :aList.size();

List<Object> list = new ArrayList<>();
list.addAll(aList.subList(fromIndex, toIndex));

return list;
}
}, totalPage);

EasyPoiUtil.exportExcel(response, workbook, fileName);

 

 private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            response.setHeader("content-Type", "application/vnd.ms-excel");
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            throw new NormalException(e.getMessage());
        }
    }

 

posted @ 2022-03-13 11:10  yingx  阅读(239)  评论(0)    收藏  举报