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相关推荐

  1. Spring Boot poi 导出Excel表格、Txt到浏览器下载

    Spring Boot & poi 导出Excel表格.Txt到浏览器下载 原文链接:小回博客 文章目录 Spring Boot & poi 导出Excel表格.Txt到浏览器下载 一 ...

  2. java导出为excel文件_java导出数据到excel文件

    有的时候,将一些有用的数据导出到excel是很有必要的.比如说,我现在在做一个学校的在线教学平台,有一个需求是:将学生成绩导出到excel文件中去. 那怎样实现用java导出数据到excel文件呢?? ...

  3. 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...

    如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...

  4. arcengine遍历属性表_【程序之坑】小程序云开发导出数据到excel表

    本文解决了小程序云开发导出数据到excel的bug,并给出了分析的过程,同时简化了程序为一个云函数,一个本地函数,逻辑更简单.文章结尾给出了完整源代码 小程序云开发为没有服务器的小程序开发者提供了便利 ...

  5. python输出数据到excel-python如何导出数据到excel文件

    python导出数据到excel文件的方法: 1.调用Workbook()对象中的add_sheet()方法wb = xlwt.Workbook() ws = wb.add_sheet('A Test ...

  6. python输出数据到excel-Python从数据库导出数据到Excel

    #coding=utf-8 import pymysql import xlwt import importlib,sys importlib.reload(sys) # __author__ = ' ...

  7. (转)另一篇:VC导出数据到EXCEL

    另一篇:VC导出数据到EXCEL 2010-08-28 17:03:47|  分类: 默认分类 |  标签: |字号大中小 订阅 我们制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛 ...

  8. SQLSERVER使用CLR Stored Procedure导出数据到Excel

    在实际应用中,我们经常需要导出数据到Excel文件,你可以使用DTS或SSIS来做.但有时,我们并不需要这么重量级的工具,直接用CLR SP实现就可以了. 假设你已经写好了导出Excel的C# cod ...

  9. 前端利用JS导出数据到Excel表 数字是文本类型 无法计算

    问题描述:前端利用JS导出数据到Excel表 数字是文本类型 无法进行公式计算:前端利用JS导出数据到Excel表 数字是文本类型 无法计算 解决办法:参考https://bbs.csdn.net/t ...

最新文章

  1. 基于SSVEP-EOG的混合BCI用于机械臂控制
  2. nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url...
  3. 子弹短信体验分析:一个单纯想“快”的IM工具 子弹短信体验分析:锤科情怀缩影,打败微信有点远
  4. 5-2 决策树算法预测销量高低代码
  5. 一个java文件中可包含多个main方法
  6. 动点移动轨迹,猜猜这是曲线还是直线?
  7. [转载]PHP 计算时间差
  8. 马斯克翻跟头机器人_马斯克又搞事情 用VR训练机器人模仿人类动作
  9. 计算机组装已维护的学术报告,计算机硬件组装维护的策略研究
  10. Linux下TCP循环接收数据的方式
  11. 通过EPPlus导出Excel文件
  12. 解决win10系统安装ch341驱动程序显示“预安装成功”的一个方法
  13. GMSM —— 国密简介、概念(SM1-9)、ZUC祖冲之算法
  14. 算一串数字的entropy_【一点资讯】数字的作用,远比我们想的多得多 www.yidianzixun.com...
  15. mysql高效查询_mysql 高效率查询背景
  16. 苹果自带相册打马赛克_原来手机点击这个按钮,就能一键生成音乐电子相册!这也太厉害了...
  17. iOS-常见三种加密(MD5、非对称加密,对称加密)
  18. vysor技术实现原理(投屏不包括鼠标控制)
  19. 【群晖NAS】 利用云服务器 FRP技术 实现内网穿透
  20. EverBox 能否成为中国的dropbox

热门文章

  1. 案例分析:免费的维护服务
  2. ASP.NET中Server与Request对象的方法
  3. discuz nt 安装,完全攻略。
  4. 计算机网络 实验 使用端口完成地址转换,Wireshark抓包工具计算机网络实验解析...
  5. 腐烂国度2怎么学计算机,腐烂国度2按键操作说明 腐烂国度2怎么操作
  6. 西部服务器怎么备份文件,怎么将云服务器数据还原
  7. python数据读取失败无法启动应用_tensorflow初学者教程-读取数据集失败
  8. 最大流最小割经典例题_C/C++知识点之最大流最小割C++实现
  9. 【小白学习keras教程】二、基于CIFAR-10数据集训练简单的MLP分类模型
  10. 五十五、深入插入排序和选择排序