JXL生成Excel,并提供下载(2:提供下载)
实现效果:
项目中使用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:
- downloadTemplate('exportExcelServlet.exportExcelServlet','filename',id);
表单:
- /**
- * js创建form表单的提交(我的页面没写form表单),采用post方式提交(这里不用改)
- * @param action action映射地址:web.xml配置了Servlet响应类
- * @param type: 名称
- * @param value:表单传给后台的值
- */
- function downloadTemplate(action, type, value){
- var form = document.createElement('form');
- document.body.appendChild(form);
- form.style.display = "none";
- form.action = action;
- form.id = 'excel';
- form.method = 'post';
- var newElement = document.createElement("input");
- newElement.setAttribute("type","hidden");
- newElement.name = type;
- newElement.value = value;
- form.appendChild(newElement);
- form.submit();
- }
2、web.xml:配置响应表单的Servlet
- /**
- * web.xml:提交Form表单后,响应的处理类
- * 响应以.exportExcelServlet结尾的Action
- * @param type: 名称
- * @param value:表单传给后台的值
- */
- <servlet>
- <servlet-name>exportExcelServlet</servlet-name>
- <servlet-class>
- Servlet类所在路径.ExportExcelServlet
- </servlet-class>
- <load-on-startup></load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>exportExcelServlet</servlet-name>
- <url-pattern>*.exportExcelServlet</url-pattern>
- </servlet-mapping>
3、Servlet
- public class ExportExcelServlet extends HttpServlet {
- /**
- * serialVersionUID
- */
- private static final long serialVersionUID = -4541729035831587727L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doPost(req, resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- //form表单的value传的值
- Long id = Long.valueOf(req.getParameter("filename"));
- //调用生成Excel的函数,它生成Excel保存到服务器
- exportExcel(id);
- try{
- // 清空输出流
- resp.reset();
- //获取上面生成Excel的路径
- String filePath = "路径";
- //设置编码方式
- resp.setCharacterEncoding("UTF-8");
- // 设定输出文件头
- resp.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode("自定义下载保存的名称","UTF-8"));
- resp.setContentType("application/ms-excel");
- // 流的方式读取保存到服务器的Excel
- DataInputStream in = new DataInputStream(
- new FileInputStream(new File(filePath)));
- // 流的方式输出到浏览器,可下载
- OutputStream out = resp.getOutputStream();
- int bytes = ;
- byte[] bufferOut = new byte[];
- while ((bytes = in.read(bufferOut)) != -) {
- out.write(bufferOut, , bytes);
- }
- out.close();
- in.close();
- //删除刚才保存到服务器的路径的Excel
- RemoveDirectoryUtil.delSingleFile(filePath);
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- }
JXL生成Excel,并提供下载(2:提供下载)的更多相关文章
- JXL生成Excel,并提供下载(1:生成Excel)
public String exportExcel(long id) { String preeReviewName = "文件名"; String filePath = 路径名; ...
- Java后台通过jxl生成Excel表格
这里封装了一个工具类,将对象的list集合解析生成表格,只要按照参数要求传参就好了. 工具类代码如下: package com.hd.erpreport.utils; import java.io.F ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- 使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
- JAVA利用JXL导出/生成 EXCEL
/** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...
- Java生成excel导出文件(使用poi+JXL)
1.使用poi生成文件 package com.mi.entity; import java.util.Date; public class Student { private int id; pri ...
- Java上传下载excel、解析Excel、生成Excel
在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...
- phpexcel生成excel并下载
Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...
- .net生成Excel,并下载
生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原 ...
随机推荐
- Codeforces 488B - Candy Boxes
B. Candy Boxes 题目链接:http://codeforces.com/problemset/problem/488/B time limit per test 1 second memo ...
- Unity中的粒子特效的 RendererQ 排序
这里接https://www.cnblogs.com/luguoshuai/p/10021660.html 这里介绍两套粒子排序的方法. 首先声明,这两套排序方法均不是本人所写,是在项目开发的过程当中 ...
- Redis入门指南之二(安装及配置)
本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...
- pythonl输出的预警消息中的json串的中文展示乱码(中文的unicode码)
来源:ctrip接口名称:ReviewStandartAPI错误信息:[{'ReviewTime': u'\u63a5\u53e3\u8fd4\u56de\u7684\u70b9\u8bc4\u65f ...
- ROS的安装和卸载
Robot Operating System (ROS) 是一个得到广泛应用机器人系统的软件框架,它包含了一系列的软件库和工具用于构建机器人应用.从驱动到最先进的算法,以及强大的开发者工具,ROS 包 ...
- 使用VueCLI的User Interface Tool(GUI)创建app的图文讲解
(英文原文) 需要安VueCLI3和nodejs. 在terminal输入vue可以看到命令列表: 其中vue ui [options] 就是用于开始和打开vue-cli ui的命令. 使用http: ...
- 使用scrapy-crawlSpider 爬取tencent 招聘
Tencent 招聘信息网站 创建项目 scrapy startproject Tencent 创建爬虫 scrapy genspider -t crawl tencent 1. 起始url sta ...
- 「THUWC 2017」在美妙的数学王国中畅游
这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了.
- Entertainment Box(可多执行的区间问题)
本题出自: Nordic Collegiate Programming Contest 2015 Ada, Bertrand and Charles often argue over which T ...
- python-day73--django-分页
''' 批量导入数据:bulk_create Booklist=[] for i in range(100): Booklist.append(Book(title="book"+ ...