easy excel 实现分页批量导出
主要对easyExcel做了易用性的封装,需要导出的话,就继承这个类。
@Log4j2
public class EasyExcelBaseController<T> {/*** 导出时候 获取某一页的数据.*/protected List<T> getExportPageData(Object condtion, int current ,int size){return null;}/*** 导出excel*/public void exportExcel(Object condtion,HttpServletResponse response,Class<T> realT, String fileName_en,String fileName_zh,List<String> excludeColumnList){long startTime = System.currentTimeMillis();log.info("export {} file start ",fileName_en);ExcelWriter excelWriter = null;try {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode(fileName_zh, "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");excelWriter = EasyExcel.write(response.getOutputStream(), realT).excludeColumnFiledNames(excludeColumnList).build();WriteSheet writeSheet = EasyExcel.writerSheet(1).build();int current = 1;List<T> exportDatas = null;while (true){//分页查询exportDatas = getExportPageData(condtion,current,TmsSystemConfig.BATCH_EXPORT_NUM);//根据数据导出excelif(exportDatas.size() > 0){excelWriter.write(exportDatas, writeSheet);}if( exportDatas.size() < TmsSystemConfig.BATCH_EXPORT_NUM){break;}//还有数据 继续查询current++;}} catch (Exception e) {log.error("export excel {} error error list:{}",fileName_en);log.error("export excel error error list:{}",e);}finally {//一定要关掉if(excelWriter != null){excelWriter.finish();}}long endTime = System.currentTimeMillis();log.info("export {} file end , total use time :{} ",fileName_en,endTime-startTime);}}
现在,我们就可以继承这个EasyExcelBaseController类,然后实现导出了,如下
public class UserExcelController extends EasyExcelBaseController<UserVO> {private UserFeignApi userFeignApi;/*** 导出用户列表excel*/@GetMapping("/export")@ApiOperation(value = "导出excel", notes = "导excel")public void exportExcel(UserExportDTO dto, HttpServletResponse response) {super.exportExcel(dto, response, UserVO.class,"userList","用户导出列表",null);}/*** 查询导出的分页数据的某一页数据*/@Overridepublic List<UserVO> getExportPageData(Object condtion, int current, int size){UserExportDTO dto = (UserExportDTO ) condtion;List<UserVO> list = new ArrayList<>();R<Page<UserVO>> ret = userFeignApi.selectPage(dto,current,size);if(ret != null && ret.getData() != null){if(ret.getData().getTotal() > TmsSystemConfig.BATCH_EXPORT_MAX_NUM){throw new ServiceException("导出数据过多,超过最大值,请优化查询条件,缩小数据范围!");}list = ret.getData().getRecords();}return list;}
}
这样就实现了,一个很好用的easyExcel批量分页导出的工具类。
easy excel 实现分页批量导出相关推荐
- Excel表格怎么批量导出图片将文件中的图片导出到文件夹中
这几天一直没写博文,但是为了让大山的孩子,能够像京城的富二代一样,可以开开心心公公平平地享受学习excel的权利,因此决定今天继续写,今天主要来谈谈excel图片批量导出,关于excel表格怎么批量导 ...
- java excel导出2007_java操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- php批量导出excel表格,PHP批量导出数据为excel表格
之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...
- 如何用java使用POI读取excel文件,创建excel文件,实现批量导出和导入
例子1: 1 //读取excel 2 String path = "F:\\\\yujun\\\\javaweb\\\\第二章\\\\stu.xlsx"; 3 //工作表 4 Wo ...
- Python自动化办公:将Excel表格内容批量导出为PDF文件
Python自动处理Excel表格数据 序言 代码实现 序言 上一篇咱们实现了多个表格数据合并到一个表格,本次咱们来学习如何将表格数据分开导出为PDF文件. 部分数据 然后需要安装一下这个软件 wkh ...
- php 批量导出excel文件,PHPEXCEL批量导出
// 引入phpexcel核心类文件 require_once ROOT_PATH . '/includes/phpexcel/Classes/PHPExcel.php'; // 实例化excel类 ...
- Python+Excel+VBA实现批量自助生成名牌
文章目录 需求 在Excel制作名牌 批量导出图片 1. 全VBA 2. VBA+压缩包 3. Python+Excel 打包 需求 这次是hrbp小姐姐需要找我批量生成他们新部门的员工名牌.如果让设 ...
- mybatis + easy excel 导出百万级数据仅需要1g内存
思路 mybatis 流处理 (实际就是 jdbc 层面的游标,避免分页查询(只需要查询一次数据库)) + easy excel多次写. import org.apache.ibatis.sessio ...
- java操作Excel之POI(4)利用POI实现数据的批量导出
后台导出方法: 1 /** 2 * 后台导出方法 3 * 利用POI实现数据的批量导出 4 */ 5 public String export() throws Exception{ 6 Connec ...
最新文章
- fiddler 抓取winform wcf包
- windows中卸载Jenkins
- 信息保护:从经典纠错到量子面膜
- Java 调用 Kotlin
- tag+标签+php,ZBLOG PHP代码实现侧栏彩色标签TAG关键字样式方法
- 华为敏捷DevOps实践:如何从Excel管理软件的方式中走出来
- 算法题复习(快排、链表、二分、哈希、双指针)
- java abstractrequest,Java AbstractJackson2HttpMessageConverter類代碼示例
- repeated_Ruby中带有示例的Array.repeated_combination()方法
- docker cp :用于容器与主机之间的数据拷贝
- OpenGl文章 Android OpenGL ES 简明开发教程
- java 如何将异常_java中的异常处理
- matlab车牌识别源代码资源,车牌识别系统MATLAB源代码完整
- WareZ入门指南--TLF元老thunderlight
- 中安证件识别系统介绍
- 武书连2022中国大学综合实力排行榜发布!
- Opencv4.2 DNN模块 终于支持Nividia GPU了!
- 数据仓库历史数据存储 - 拉链表
- 中外消防传感器差距浅析
- Science Advances:社会和健康科学中用于描述、预测和因果推理的机器学习方法