做第一个网站什么类型,杭州app开发制作公司,巨鹿网站建设多少钱,wordpress 调用GPSspringboot使用EasyExcel导出数据
简介#xff1a;本文主要描述使用EasyExcel导出数据的简单流程#xff0c;事实上企业需求一般都比较简单#xff0c;就是表单数据输出到Excel即可#xff0c;如果数据量大的话#xff0c;为了避免占用内存过高或者OOM#xff0c;使用多…springboot使用EasyExcel导出数据
简介本文主要描述使用EasyExcel导出数据的简单流程事实上企业需求一般都比较简单就是表单数据输出到Excel即可如果数据量大的话为了避免占用内存过高或者OOM使用多次读数据多次写入的方法下面就简单介绍下两种情景的实现。
1. 导入依赖
!-- Easy Excel --
dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.2.1/version
/dependency2. 建立对应实体类
例如我要导出的Excel数据格式为 首先创建实体类
Getter
Setter
ToString
public class UserInfoForExcel {ExcelProperty(ID) // 标注字段对应Excel列行头private String userId;ExcelProperty(账号)private String account;ExcelProperty(邮箱)private String email;ExcelProperty(昵称)private String nickname;ExcelProperty(年龄)private Integer age;ExcelProperty(生日)DateTimeFormat(yyyy-MM-dd)private Date birthday;
}3. 创建处理方法
假如流程为 前端发送get请求后端controller接收提交给service处理service从dao中获取数据后生成excel表然后将excel的路径返回给前端一般需求肯定是URL或者URI此处只做演示不做URL处理直接返回路径
service处理方法代码如下 /*** 从数据库读取所有数据使用EasyExcel生成表格* return*/public String handleExcelOutput() {String fileName D://data/ user_info_ System.currentTimeMillis() .xlsx;UserInfoData userInfoData new UserInfoData(); // 从数据库获取数据的daoEasyExcel.write(fileName, UserInfoForExcel.class).sheet(模板).doWrite(userInfoData.getUserInfoList()); // 写Excelreturn fileName;}下面是模拟数据库获取数据操作可以忽略
Getter
Setter
ToString
public class UserInfoData {/*** 模拟数据库获取数据*/public ListUserInfoForExcel getUserInfoList() {ListUserInfoForExcel list new ArrayList();for (int i 1; i 18; i){UserInfoForExcel userInfoForExcel new UserInfoForExcel();userInfoForExcel.setUserId(00i);userInfoForExcel.setAge(16i);userInfoForExcel.setAccount(accounti);userInfoForExcel.setNickname(nick i);userInfoForExcel.setEmail(123i123.com);try {userInfoForExcel.setBirthday(new SimpleDateFormat(yyyy-MM-dd).parse(1997-06-1i));} catch (ParseException e) {// 测试demo不做处理throw new RuntimeException(e);}list.add(userInfoForExcel);}System.out.println(list);return list;}
}4. 测试接口
RestController
RequestMapping(userinfo)
public class UserInfoController {AutowiredUserService userService;GetMapping(output)public String handleExcelOutput() throws ParseException {String s userService.handleExcelOutput();return s;}
}5. 测试结果
在设定的文件路径中可以看到生成的Excel表 6. 分批写到Excel
上面的例子是将数据一次性读取后写到excel占用内存过大可以分多次写入service方法如下 /*** 从数据库分页读取数据使用EasyExcel分多次写入Excel* return*/public String handleExcelOutputOnPage() {String fileName D://data/ user_info_ System.currentTimeMillis() .xlsx;UserInfoData userInfoData new UserInfoData(); // 从数据库获取数据的dao// 这里 需要指定写用哪个class去写try (ExcelWriter excelWriter EasyExcel.write(fileName, UserInfoForExcel.class).build()) {WriteSheet writeSheet EasyExcel.writerSheet(模板).build();// 去调用写入,这里我调用了五次实际使用时根据数据库分页的总的页数来// 例如数据库中数据位1000条每次写入100条则i为Math.ceil(1000/100)向上取整for (int i 0; i 5; i) {// 分页去数据库查询数据 这里可以去数据库查询每一页的数据// 通过设置limit值获取不同页数据ListUserInfoForExcel userInfoList userInfoData.getUserInfoList();excelWriter.write(userInfoList, writeSheet);}}return fileName;}7. 最后
以上就是全文内容最后还是提醒这只是最简单的需求和实现方法事实上EasyExcel还能实现其他有趣的功能建议去官网看文档 官网地址https://easyexcel.opensource.alibaba.com/