实现效果:

项目中使用JXL生成Excel,使生成的Excel可以让用户下载,如下图

一、生成Excel

二、提供下载

实现思路:

1、页面使用form表单提交方式(Ajax提交方式,只能使用原生Ajax,jquery的ajax不可以)

2、后台使用HttpServletResponse响应前台form表单的请求(我这里使用Servlet类响应,比较古老,^_^)

3、

(1)生成的Excel表,先保存到服务器(JXL的write()方法)

(2)DataInputStream以流的方式读取这个Excel表

(3)DataOutputStream以流的方式输出,用户即可下载

(4)删除第一步保存的Excel表

PS:虽然我也不想这么麻烦,但是浪费了一天时间后,貌似只有这种方法

实现代码:

1、前台:提交表单

JS:

  1. downloadTemplate('exportExcelServlet.exportExcelServlet','filename',id);

表单:

  1. /**
  2. * js创建form表单的提交(我的页面没写form表单),采用post方式提交(这里不用改)
  3. * @param action action映射地址:web.xml配置了Servlet响应类
  4. * @param type: 名称
  5. * @param value:表单传给后台的值
  6. */
  7. function downloadTemplate(action, type, value){
  8. var form = document.createElement('form');
  9. document.body.appendChild(form);
  10. form.style.display = "none";
  11. form.action = action;
  12. form.id = 'excel';
  13. form.method = 'post';
  14.  
  15. var newElement = document.createElement("input");
  16. newElement.setAttribute("type","hidden");
  17. newElement.name = type;
  18. newElement.value = value;
  19. form.appendChild(newElement);
  20.  
  21. form.submit();
  22. }

2、web.xml:配置响应表单的Servlet

  1. /**
  2. * web.xml:提交Form表单后,响应的处理类
  3. * 响应以.exportExcelServlet结尾的Action
  4. * @param type: 名称
  5. * @param value:表单传给后台的值
  6. */
  7. <servlet>
  8. <servlet-name>exportExcelServlet</servlet-name>
  9. <servlet-class>
  10. Servlet类所在路径.ExportExcelServlet
  11. </servlet-class>
  12. <load-on-startup></load-on-startup>
  13. </servlet>
  14.  
  15. <servlet-mapping>
  16. <servlet-name>exportExcelServlet</servlet-name>
  17. <url-pattern>*.exportExcelServlet</url-pattern>
  18. </servlet-mapping>

3、Servlet

  1. public class ExportExcelServlet extends HttpServlet {
  2.  
  3. /**
  4. * serialVersionUID
  5. */
  6. private static final long serialVersionUID = -4541729035831587727L;
  7.  
  8. @Override
  9. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  10. throws ServletException, IOException {
  11. doPost(req, resp);
  12. }
  13.  
  14. @Override
  15. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  16. throws ServletException, IOException {
  17.  
  18. //form表单的value传的值
  19. Long id = Long.valueOf(req.getParameter("filename"));
  20.  
  21. //调用生成Excel的函数,它生成Excel保存到服务器
  22. exportExcel(id);
  23.  
  24. try{
  25. // 清空输出流
  26. resp.reset();
  27. //获取上面生成Excel的路径
  28. String filePath = "路径";
  29. //设置编码方式
  30. resp.setCharacterEncoding("UTF-8");
  31. // 设定输出文件头
  32. resp.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode("自定义下载保存的名称","UTF-8"));
  33. resp.setContentType("application/ms-excel");
  34. // 流的方式读取保存到服务器的Excel
  35. DataInputStream in = new DataInputStream(
  36. new FileInputStream(new File(filePath)));
  37. // 流的方式输出到浏览器,可下载
  38. OutputStream out = resp.getOutputStream();
  39.  
  40. int bytes = ;
  41. byte[] bufferOut = new byte[];
  42. while ((bytes = in.read(bufferOut)) != -) {
  43. out.write(bufferOut, , bytes);
  44. }
  45. out.close();
  46. in.close();
  47. //删除刚才保存到服务器的路径的Excel
  48. RemoveDirectoryUtil.delSingleFile(filePath);
  49. } catch(Exception e){
  50. e.printStackTrace();
  51. }
  52. }
  53.  
  54. }

JXL生成Excel,并提供下载(2:提供下载)的更多相关文章

  1. JXL生成Excel,并提供下载(1:生成Excel)

    public String exportExcel(long id) { String preeReviewName = "文件名"; String filePath = 路径名; ...

  2. Java后台通过jxl生成Excel表格

    这里封装了一个工具类,将对象的list集合解析生成表格,只要按照参数要求传参就好了. 工具类代码如下: package com.hd.erpreport.utils; import java.io.F ...

  3. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  4. 使用node.js生成excel报表下载(excel-export express篇)

    引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...

  5. JAVA利用JXL导出/生成 EXCEL

    /** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...

  6. Java生成excel导出文件(使用poi+JXL)

    1.使用poi生成文件 package com.mi.entity; import java.util.Date; public class Student { private int id; pri ...

  7. Java上传下载excel、解析Excel、生成Excel

    在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...

  8. phpexcel生成excel并下载

    Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...

  9. .net生成Excel,并下载

    生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原 ...

随机推荐

  1. Codeforces 488B - Candy Boxes

    B. Candy Boxes 题目链接:http://codeforces.com/problemset/problem/488/B time limit per test 1 second memo ...

  2. Unity中的粒子特效的 RendererQ 排序

    这里接https://www.cnblogs.com/luguoshuai/p/10021660.html 这里介绍两套粒子排序的方法. 首先声明,这两套排序方法均不是本人所写,是在项目开发的过程当中 ...

  3. Redis入门指南之二(安装及配置)

    本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...

  4. pythonl输出的预警消息中的json串的中文展示乱码(中文的unicode码)

    来源:ctrip接口名称:ReviewStandartAPI错误信息:[{'ReviewTime': u'\u63a5\u53e3\u8fd4\u56de\u7684\u70b9\u8bc4\u65f ...

  5. ROS的安装和卸载

    Robot Operating System (ROS) 是一个得到广泛应用机器人系统的软件框架,它包含了一系列的软件库和工具用于构建机器人应用.从驱动到最先进的算法,以及强大的开发者工具,ROS 包 ...

  6. 使用VueCLI的User Interface Tool(GUI)创建app的图文讲解

    (英文原文) 需要安VueCLI3和nodejs. 在terminal输入vue可以看到命令列表: 其中vue ui [options] 就是用于开始和打开vue-cli ui的命令. 使用http: ...

  7. 使用scrapy-crawlSpider 爬取tencent 招聘

    Tencent 招聘信息网站 创建项目 scrapy startproject Tencent 创建爬虫 scrapy genspider -t crawl tencent 1. 起始url  sta ...

  8. 「THUWC 2017」在美妙的数学王国中畅游

    这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了.

  9. Entertainment Box(可多执行的区间问题)

    本题出自: Nordic Collegiate Programming Contest 2015​ Ada, Bertrand and Charles often argue over which T ...

  10. python-day73--django-分页

    ''' 批量导入数据:bulk_create Booklist=[] for i in range(100): Booklist.append(Book(title="book"+ ...