java 设置Response 实现自动下载Excel并完成后自动打开

  • 我们可以设置response的请求头来让浏览器识别,做出相应的效果

实现 下载文件完成后自动打开 本文以Excel为例子 环境为SpringMVC
maven依赖如下:

     <!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency>
//SpringMVC
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
//java.io
import java.io.InputStream;
import java.io.IOException;
//Servlet
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
//poi
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

我们可以设置response的请求头来让浏览器识别,做出相应的效果

// 故障导出@RequestMapping(value = "doExportHideFaultGuide")  public ModelAndView doExportHideFaultGuide(@RequestParam String[] trainType,HttpServletResponse response){//表示“我不清楚代码内容,只需要保存为一个文件response.setContentType("application/octet-stream");//文件的名字response.setHeader("name", "隐性规则.xls");//Cach-Control的作用: https://blog.csdn.net/u012375924/article/details/82806617//关于 Cache-Control 的 must-revalidate 表示强制页面不缓存,作用与 no-cache 相同,但是是强制的意思 //详细请参考:http://hi.baidu.com/chenleibupt/blog/item/9627bec6932e5a179c163df2.html//post-check=0, pre-check=0 为IE5的指令response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");//缓存指令response.setHeader("Pragma", "public");//设置页面立即过期  页面立刻过期 (关闭)response.setDateHeader("Expires", 0);//数据集合List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();try {//设置文件名和编码response.setHeader("Content-disposition", "attachment; filename=\""+ new String(fileName.getBytes("UTF-8"), "ISO-8859-1") + "\"");try {//需要导出的map集合(获取数据集合)list = evGroupService.selectHideFaultGuide(trainType);} catch (Exception e) {e.printStackTrace();}//也开这样写evGroupService.doExport(list).write(response.getOutputStream());//这里的操作为 将数据集合抓换成SXSSFWorkbook 对象SXSSFWorkbook doExport = evGroupService.doExport(list);doExport.write(response.getOutputStream());response.getOutputStream().flush();response.getOutputStream().close();} catch (Exception e) {Log.warn("参数统计分析导出异常!!!",e);}return null;}
//evGroupService.doExport 方法 此处的使用 poi
@Overridepublic SXSSFWorkbook doExport(List<Map<String, Object>> list) throws Exception {//工作簿构建时指定窗口大小SXSSFWorkbook workbook = new SXSSFWorkbook(100);//创建工作簿的一个工作表Sheet sheet = workbook.createSheet();//冻结工作表前两行sheet.createFreezePane(0, 1, 0, 1); /// sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));//合并单元格// sheet.setColumnWidth(0, 32 * 80);// 对A列设置宽度为180像素//导出的title数组String[] headerTitles = { "序号",  "车型", "频率类型", "频率次数","预警等级", "故障代码", "预警提示" };//setColumnWidth设置每列宽度(第几列,宽度)for (int i = 0; i < headerTitles.length; i++) {sheet.setColumnWidth(i, 32 * 180);// 对A列设置宽度为180像素}//获取样式CellStyle headerStyle0 = ExcelStyle.getHeaderStyleA(workbook);CellStyle contentStyle = ExcelStyle.getContentStyle(workbook);//创建下标为0一行(第一行)Row row = sheet.createRow(0);// 设置第一行信息//setHeight高row.setHeight((short) (32 * 18));//格子Cell cell = null;for (int i = 0; i < headerTitles.length; i++) {//创建第一格cell = row.createCell(i);//设置值和样式cell.setCellValue(headerTitles[i]);cell.setCellStyle(headerStyle0);}//要导出的对象 遍历第一行for (int i = 0; i < list.size(); i++) {//从第二行开始row = sheet.createRow(i + 1);//设值和样式for (int j = 0; j < headerTitles.length; j++) {cell = row.createCell(j);cell.setCellStyle(contentStyle);}//获取当前行 数据对象Map<String, Object> map = list.get(i);//设置第一格序号row.getCell(0).setCellValue(String.valueOf(i + 1));//第二格数据row.getCell(1).setCellValue(map.get("TRAINNAME").toString());//频率类型 对值进行判断if(map.get("DTYPE") != null){if("0".equals(map.get("DTYPE").toString())){row.getCell(2).setCellValue("任何一次");}else if("3".equals(map.get("DTYPE").toString())){row.getCell(2).setCellValue("日均");}else if("8".equals(map.get("DTYPE").toString())){row.getCell(2).setCellValue("持续天数");}}//频率次数 第四格数据if(map.get("DSCOPE") != null ){row.getCell(3).setCellValue(map.get("DSCOPE").toString());}else{row.getCell(3).setCellValue("");}//预警等级 第五格数据if(map.get("LVL") != null){row.getCell(4).setCellValue(map.get("LVL").toString());}else{row.getCell(4).setCellValue("");}//故障代码 第六格数据if(map.get("FT_CODE") != null){row.getCell(5).setCellValue(map.get("FT_CODE").toString());}else{row.getCell(5).setCellValue("");}//预警提示 第七格数据if(map.get("EVENT") != null){row.getCell(6).setCellValue(map.get("EVENT").toString());}else{row.getCell(6).setCellValue("");}}return workbook;}/*** * @Description: 2007扩展方法* @param workbook* @return CellStyle* @throws* @author LiLW* @date 2017年4月19日 下午3:13:25  * @version V1.0*/public static CellStyle getHeaderStyleA(SXSSFWorkbook workbook) {// 创建样式Font font1 = workbook.createFont();// 字体加粗font1.setFontName("黑体");font1.setFontHeightInPoints((short) 12);// 设置字体大小// font1.setColor(HSSFColor.LIGHT_BLUE.index); //绿字font1.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);CellStyle headerStyle = workbook.createCellStyle();// 设置垂直居中headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中// 设置边框headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);headerStyle.setFont(font1);headerStyle.setWrapText(true); return headerStyle;}/*** * @Description: 2007扩展方法* @param workbook* @return CellStyle* @throws* @author LiLW* @date 2017年4月19日 下午3:18:46  * @version V1.0*/public static CellStyle getContentStyle(SXSSFWorkbook workbook) {// 设置内容行格式CellStyle contentStyle = workbook.createCellStyle();// 设置垂直居中contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);contentStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中// 设置边框contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);return contentStyle;}

Excel导出 并完成后自动打开相关推荐

  1. 关闭word后自动打开新的文档

    解决关闭word后自动打开新的文档 声明:此方法是学的别人的,写出来仅仅为了记录. 步骤:文件 → 选项 → 加载项 → 管理:com加载项 → 转到mysql for excel → 去掉勾勾 → ...

  2. webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法

    webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法..怎么做..求指导

  3. 电脑桌面计算机总是自动打开,电脑开机后自动打开很多软件怎么办

    1. 电脑一开机自动启动好多小程序,如何取消掉 电脑一开机自动启动好多小程序,取消方法如下: 1打开开始菜单,在搜索框输入msconfig ,按回车键, 2在启动栏把不需要启动的程序打勾去掉,点击确定 ...

  4. 关于WebView加载H5页面下载文件和下载完毕后自动打开文件

    前段时间有个项目需要在H5页面里下载文档文件,由于项目需求这里采用Android系统自带DownloadManager来进行后台自动下载管理,我们只需要稍微设置几个参数就进行文件下载了,并且下载进行时 ...

  5. 等Excel工作簿关闭后自动加密压缩备份

    ; ; 等Excel工作簿关闭后自动加密压缩备份.ahk ; ; 腾讯QQ号 595076941 ; 作者:boai ; 写作日期:2019年5月15日 ; 版本号:第1版 ; 手机号(中国移动) 1 ...

  6. Springboot项目启动后自动打开浏览器访问(超实用)

    Springboot项目启动后自动打开浏览器访问 1.在Springboot项目中每次启动完项目,手动在浏览器输入访问地址太麻烦了.在启动类中加入下方代码,就可高效地在控制台中单击URL访问项目了~ ...

  7. Vue进阶(幺陆叁):vue项目启动后自动打开页面并设置默认浏览器

    文章目录 一.修改默认浏览器 二.vue 项目启动自动打开页面 三.拓展阅读 以windows 系统为例,操作方法如下: 一.修改默认浏览器 设置谷歌浏览器为默认浏览器. 1.首先打开"开始 ...

  8. springboot配置启动后自动打开浏览器访问项目

    springboot配置项目启动后自动打开浏览器访问项目 有时候在单机部署,或者项目没有在IDea 开发工具中运行(idea可以自动打开tomcat项目),需要项目启动后自动打开浏览器访问项目,配置方 ...

  9. 配置vue项目启动后自动打开浏览器,出现网址跳转错误问题:网址为http://0.0.0.0:8080/ 的页面可能存在问题,或者已永久移动到新的网址。

    我们在Vue项目package.js文件里配置启动后启动后自动打开浏览器时,也就是加上–open "scripts": {"serve": "vue- ...

最新文章

  1. hdu 5273 Dylans loves sequence 逆序数简单递推
  2. Fiddle抓包Https
  3. java 偏移符号_java中的移位运算符总结
  4. java 限制文本框长度_[Java教程]如何限制textarea文本框的输入字数
  5. 类中构造函数、析构函数与赋值函数的重写
  6. 一起学习C语言:初谈指针(一)
  7. mysql参数之innodb_buffer_pool_size大小设置
  8. 1.14_radix_sort_基数排序
  9. 量体裁衣:将DevOps转型融入到企业文化
  10. 第五篇:明确拒绝不想编译器自动生成的拷贝构造函数和赋值运算符重载函数...
  11. ChartDirector画2D,3D图,MFC画图
  12. Matlab基础笔记
  13. 玩转codesys入门篇
  14. 括号序列(DP优化)
  15. 如何在VR全景作品中添加独立热点?
  16. 该应用程序从products.json加载数据
  17. delphi中pos的用法
  18. 快来开建春晚红包信息群吧!
  19. 【转载】网站关闭了域名备案信息是否需要注销,答案是一定要记得注销域名备案信息,防止域名过期后被他人注册用于非法用途而带来不必要的麻烦...
  20. chrom调试技巧大全,史上最全

热门文章

  1. Gooowild隐私政策
  2. SafeNet通过新的光纤签名设备加强应对电子银行诈骗
  3. 【Flask项目】项目准备之-容联云短信服务平台使用—发送短信、Flask-limiter限流
  4. arm linux not syncing,Kernel panic - not syncing: No init found(busybox制作根文件
  5. 异步电机仿真为什么转速不是0
  6. 花了10分钟终于明白矩阵的逆怎么用了!
  7. Android连接夜神模拟器详细步骤
  8. FULL JOIN 数据库全连接查询SQL
  9. 封装运动函数左右切换版本轮播图
  10. MYSQL练习题:第二高的薪水(查找第N高的数)