spring boot实现导出数据到excel
1.导入依赖;
<!--数据导出依赖 excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version> </dependency> |
2.设置excel文件的表头
import java.util.ArrayList; import java.util.HashMap; import java.util.Map;/*** @desc:数据导出,生成excel文件时的列名称集合* @author: chao* @time: 2018.6.11*/ public class ColumnTitleMap {private Map<String, String> columnTitleMap = new HashMap<String, String>();private ArrayList<String> titleKeyList = new ArrayList<String> ();public ColumnTitleMap(String datatype) {switch (datatype) {case "passenger":initPassengerColu();initPassengerTitleKeyList();break;default:break;}}/*** mysql用户表需要导出字段--显示名称对应集合*/private void initPassengerColu() {columnTitleMap.put("idCard", "身份证号");columnTitleMap.put("passName", "乘客姓名");columnTitleMap.put("sex", "性别");columnTitleMap.put("birdate", "出生日期");columnTitleMap.put("phone", "手机号");columnTitleMap.put("birthplace", "出生地户籍");columnTitleMap.put("residence", "现住址");columnTitleMap.put("source", "注册来源");}/*** mysql用户表需要导出字段集*/private void initPassengerTitleKeyList() {titleKeyList.add("idCard");titleKeyList.add("passName");titleKeyList.add("sex");titleKeyList.add("birdate");titleKeyList.add("phone");titleKeyList.add("birthplace");titleKeyList.add("residence");titleKeyList.add("source");}public Map<String, String> getColumnTitleMap() {return columnTitleMap;}public ArrayList<String> getTitleKeyList() {return titleKeyList;} } |
3.导出工具类
把对象转MAp
import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map;public class ObjToMapUtil {/*** 对象转map* @param obj* @return*/public Map<String, Object> objToMap(Object obj) {Map<String, Object> map = new HashMap<String, Object>();Field[] fields = obj.getClass().getDeclaredFields(); // 获取f对象对应类中的所有属性域for (int i = 0, len = fields.length; i < len; i++) {String varName = fields[i].getName();varName = varName.toLowerCase(); // 将key置为小写,默认为对象的属性try {boolean accessFlag = fields[i].isAccessible(); // 获取原来的访问控制权限fields[i].setAccessible(true); // 修改访问控制权限Object o = fields[i].get(obj); // 获取在对象f中属性fields[i]对应的对象中的变量if (o != null){map.put(varName, o.toString());}fields[i].setAccessible(accessFlag); // 恢复访问控制权限} catch (IllegalArgumentException ex) {ex.printStackTrace();} catch (IllegalAccessException ex) {ex.printStackTrace();}}return map;}} |
把查询到的数据读入excel
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map;/*** @desc:数据导出,生成excel文件* @author: chao* @time: 2018.6.12*/ @Service public class ExportExcelUtil {public OutputStream expoerDataExcel(HttpServletResponse response, ArrayList<String> titleKeyList, Map<String, String> titleMap, List<Map<String,Object>> src_list) throws IOException {String xlsFile_name = System.currentTimeMillis() + ".xlsx"; //输出xls文件名称//内存中只创建100个对象Workbook wb = new SXSSFWorkbook(100); //关键语句Sheet sheet = null; //工作表对象Row nRow = null; //行对象Cell nCell = null; //列对象int rowNo = 0; //总行号int pageRowNo = 0; //页行号for (int k=0;k<src_list.size();k++) {Map<String,Object> srcMap = src_list.get(k);//写入300000条后切换到下个工作表if(rowNo%300000==0){wb.createSheet("工作簿"+(rowNo/300000));//创建新的sheet对象sheet = wb.getSheetAt(rowNo/300000); //动态指定当前的工作表pageRowNo = 0; //新建了工作表,重置工作表的行号为0// -----------定义表头-----------nRow = sheet.createRow(pageRowNo++);// 列数 titleKeyList.size()for(int i=0;i<titleKeyList.size();i++){Cell cell_tem = nRow.createCell(i);cell_tem.setCellValue(titleMap.get(titleKeyList.get(i)));}rowNo++;// ---------------------------}rowNo++;nRow = sheet.createRow(pageRowNo++); //新建行对象// 行,获取cell值for(int j=0;j<titleKeyList.size();j++){nCell = nRow.createCell(j);if (srcMap.get(titleKeyList.get(j)) != null) {if("taxidriver".equals(titleKeyList.get(j))){if("0".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("否");}else if("1".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("是");}}else if("drivergender".equals(titleKeyList.get(j))){if("1".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("男");}else if("2".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("女");}else if("9".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("未知");}}else {nCell.setCellValue(srcMap.get(titleKeyList.get(j)).toString());}} else {nCell.setCellValue("");}}}response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-disposition", "attachment;filename=" + xlsFile_name);response.flushBuffer();OutputStream outputStream = response.getOutputStream();wb.write(response.getOutputStream());wb.close();outputStream.flush();outputStream.close();return outputStream;} } |
4.导出数据到excel的controller
@PostMapping("/passenger/excel/download") public Result exportPassengerData(String phone,String start,String end,String source,String state,HttpServletResponse response){try {Map<String,Object> map = new HashMap<>(); //查询需要导出的数据List<Passenger> passengerList = passengerService.getDao().getPassengerByCondition(phone,start,end,source,state);List<Map<String,Object>> list = new ArrayList<>(); //把对象转mappassengerList.forEach(passenger -> {Map<String, Object> item = new ObjToMapUtil().objToMap(passenger);list.add(item);});ArrayList<String> titleKeyList= new ColumnTitleMap("passenger").getTitleKeyList();Map<String, String> titleMap = new ColumnTitleMap("passenger").getColumnTitleMap(); //导出数据到excelOutputStream outputStream = new ExportExcelUtil().expoerDataExcel(response, titleKeyList, titleMap, list);map.put("data",outputStream);return Result.ok(map);}catch (Exception e){e.printStackTrace();return Result.fail(901,"导出乘客信息失败!");} } |
spring boot实现导出数据到excel相关推荐
- Spring Boot poi 导出Excel表格、Txt到浏览器下载
Spring Boot & poi 导出Excel表格.Txt到浏览器下载 原文链接:小回博客 文章目录 Spring Boot & poi 导出Excel表格.Txt到浏览器下载 一 ...
- java导出为excel文件_java导出数据到excel文件
有的时候,将一些有用的数据导出到excel是很有必要的.比如说,我现在在做一个学校的在线教学平台,有一个需求是:将学生成绩导出到excel文件中去. 那怎样实现用java导出数据到excel文件呢?? ...
- 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...
如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...
- arcengine遍历属性表_【程序之坑】小程序云开发导出数据到excel表
本文解决了小程序云开发导出数据到excel的bug,并给出了分析的过程,同时简化了程序为一个云函数,一个本地函数,逻辑更简单.文章结尾给出了完整源代码 小程序云开发为没有服务器的小程序开发者提供了便利 ...
- python输出数据到excel-python如何导出数据到excel文件
python导出数据到excel文件的方法: 1.调用Workbook()对象中的add_sheet()方法wb = xlwt.Workbook() ws = wb.add_sheet('A Test ...
- python输出数据到excel-Python从数据库导出数据到Excel
#coding=utf-8 import pymysql import xlwt import importlib,sys importlib.reload(sys) # __author__ = ' ...
- (转)另一篇:VC导出数据到EXCEL
另一篇:VC导出数据到EXCEL 2010-08-28 17:03:47| 分类: 默认分类 | 标签: |字号大中小 订阅 我们制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛 ...
- SQLSERVER使用CLR Stored Procedure导出数据到Excel
在实际应用中,我们经常需要导出数据到Excel文件,你可以使用DTS或SSIS来做.但有时,我们并不需要这么重量级的工具,直接用CLR SP实现就可以了. 假设你已经写好了导出Excel的C# cod ...
- 前端利用JS导出数据到Excel表 数字是文本类型 无法计算
问题描述:前端利用JS导出数据到Excel表 数字是文本类型 无法进行公式计算:前端利用JS导出数据到Excel表 数字是文本类型 无法计算 解决办法:参考https://bbs.csdn.net/t ...
最新文章
- 基于SSVEP-EOG的混合BCI用于机械臂控制
- nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url...
- 子弹短信体验分析:一个单纯想“快”的IM工具 子弹短信体验分析:锤科情怀缩影,打败微信有点远
- 5-2 决策树算法预测销量高低代码
- 一个java文件中可包含多个main方法
- 动点移动轨迹,猜猜这是曲线还是直线?
- [转载]PHP 计算时间差
- 马斯克翻跟头机器人_马斯克又搞事情 用VR训练机器人模仿人类动作
- 计算机组装已维护的学术报告,计算机硬件组装维护的策略研究
- Linux下TCP循环接收数据的方式
- 通过EPPlus导出Excel文件
- 解决win10系统安装ch341驱动程序显示“预安装成功”的一个方法
- GMSM —— 国密简介、概念(SM1-9)、ZUC祖冲之算法
- 算一串数字的entropy_【一点资讯】数字的作用,远比我们想的多得多 www.yidianzixun.com...
- mysql高效查询_mysql 高效率查询背景
- 苹果自带相册打马赛克_原来手机点击这个按钮,就能一键生成音乐电子相册!这也太厉害了...
- iOS-常见三种加密(MD5、非对称加密,对称加密)
- vysor技术实现原理(投屏不包括鼠标控制)
- 【群晖NAS】 利用云服务器 FRP技术 实现内网穿透
- EverBox 能否成为中国的dropbox
热门文章
- 案例分析:免费的维护服务
- ASP.NET中Server与Request对象的方法
- discuz nt 安装,完全攻略。
- 计算机网络 实验 使用端口完成地址转换,Wireshark抓包工具计算机网络实验解析...
- 腐烂国度2怎么学计算机,腐烂国度2按键操作说明 腐烂国度2怎么操作
- 西部服务器怎么备份文件,怎么将云服务器数据还原
- python数据读取失败无法启动应用_tensorflow初学者教程-读取数据集失败
- 最大流最小割经典例题_C/C++知识点之最大流最小割C++实现
- 【小白学习keras教程】二、基于CIFAR-10数据集训练简单的MLP分类模型
- 五十五、深入插入排序和选择排序