文件下载——下载Excel
2020-05-12 16:08:17来源:博客园 阅读 ()
文件下载——下载Excel
1、首先准备好数据。这里的数据不是直接从数据库中查到的数据而是将查到的数据复制一份,两者的数据互不影响,这样有利于复制之后的数据可以修改。
① 定义一个从数据库中查到的数据的方法(service层的实现类方法),这里省略mapper映射文件和dao层接口的方法
/** * 参数是实体类,根据参数条件获取所有的数据。forEach方法只是循环遍历获取的元素,可以根据业务需求修改元素的属性值 * / public List<User> export(User user) { List<User> userList = userDao.selectAll(user); userList.stream().forEach(e->{ // 密码回显字符表示 e.setPassword(e.getPassword().replaceAll(e.getPassword(), "******")); }); return userList; }
② 定义一个复制数据的方法,方法中可以使用Spring框架提供的BeanUtils包的copyProperties方法来复制对象的属性
/** * 复制属性的方法 */ public List<User> queueExcel(User user) { List<User> userList = export(user); List<User> exportList = new ArrayList<>(); userList.stream().forEach(e->{ // 定义一个user对象,以供接受对象的属性 User user = new User();
//对象属性复制 BeanUtils.copyProperties(e, user); exportList.add(user); }); return exportList; }
2、准备好了数据,就需要定义好一个方法,方法的内容是:与数据对应的表头;文件Excel导出到response中。
@RequestMapping(value = "/queueExcel",method = RequestMethod.POST) @ResponseBody public void queueExcel(@RequestBody User user, HttpServletResponse response){ try{ List<User> exportList = userService.queueExcel(user); LinkedHashMap<String, String> columnMap = new LinkedHashMap<>(); columnMap.put("userId", "工号"); columnMap.put("username", "用户名"); columnMap.put("realName", "真实姓名"); columnMap.put("password", "用户密码"); columnMap.put("gender", "性别"); //设置导出文件名称 String fileName = "测试.xlsx"; //导出Excel到HttpServletResponse utils.excel.ExcelUtil.exportExcelToHttpServletResponse(exportList, columnMap, fileName, response); response.getOutputStream().flush(); } catch (Exception me) { me.printStackTrace(); } }
3、上述缺少一个导出Excel文件到HttpServletResponse对象中,这时需要在定义好的包下创建类和方法。
/** * 导出Excel到HttpServletResponse * * @param dataList 数据列表 * @param columnMap 输出列及其中文列名,按顺序输出 * @param fileName 文件名 * @param <T> */ public static <T> void exportExcelToHttpServletResponse(List<T> dataList, LinkedHashMap<String, String> columnMap, String fileName, HttpServletResponse response) { if (null == dataList) { return; } try { //写到字节输出流 ByteArrayOutputStream byteArrayOutputStream = exportExcelOutputStream(dataList, columnMap); if (null == byteArrayOutputStream) { return; } //导出文件流到HttpServletResponse //防止乱码,设置HttpServletResponse编码 response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); //设置页面禁止缓存 response.setDateHeader("Expires", 0); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); //设置下载文件名 response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1")); //文件输出流写入HttpServletResponse byteArrayOutputStream.writeTo(response.getOutputStream()); } catch (Exception e) { e.printStackTrace(); } }
4、好像又缺少了一个写到字节流的方法
/** * 导出为Excel输出流 * * @param dataList 数据列表 * @param columnMap 输出列及其中文列名,按顺序输出 * @param <T> * @return oss文件url */ public static <T> ByteArrayOutputStream exportExcelOutputStream(List<T> dataList, LinkedHashMap<String, String> columnMap) { ByteArrayOutputStream byteArrayOutputStream = null; if (null == dataList) { return null; } try { // 通过工具类创建writer,创建xlsx格式 ExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getWriter(true); // if (null != columnMap) { //设置列标题 for (Map.Entry<String, String> entry : columnMap.entrySet()) { writer.addHeaderAlias(entry.getKey(), entry.getValue()); } //根据列标题,筛选过滤数据列 ArrayList<Map<String, Object>> rows = new ArrayList<>(); Map<String, Object> tempMap1 = null; Map<String, Object> tempMap2 = null; String column; for (T data : dataList) { tempMap1 = BeanUtil.beanToMap(data); tempMap2 = new LinkedHashMap<>(); for (Map.Entry<String, String> entry : columnMap.entrySet()) { column = entry.getKey(); tempMap2.put(column, tempMap1.get(column)); } rows.add(tempMap2); } //输出筛选过滤后的数据 writer.write(rows); } else { //不过滤列,直接输出数据 writer.write(dataList); } //写到字节输出流 byteArrayOutputStream = new ByteArrayOutputStream(); writer.flush(byteArrayOutputStream); //关闭writer,释放内存 writer.close(); } catch (Exception e) { e.printStackTrace(); } // return byteArrayOutputStream; }
原文链接:https://www.cnblogs.com/aitiknowledge/p/12878062.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- jdk各个版本下载 2020-06-11
- Maven安装与配置 2020-06-09
- java环境教程:Tomcat下载,安装,设置为Windows服务,启动 2020-06-09
- Spire.Cloud.SDK for Java 合并、拆分Excel单元格 2020-06-09
- 「starter推荐」简单高效Excel 导出工具 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash