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. 以上两者的原 ...
随机推荐
- (9)进程---JoinableQueue队列
消费者模型-->存和取得过程 和Queue队列区别:解决了Queue队列拿取完,程序阻塞不能自动关闭(依靠放入None来解决)的问题--->参见上个例子 put 存入, get 获取 q. ...
- boke例子: freermarker:在使用ajax传递json数据的时候多出冒号
boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...
- 单分子荧光原位杂交(smFISH)
single-molecule RNA fluorescence in situ hybridization (RNA smFISH) 单分子荧光原位杂交(smFISH)是一种新的基因表达分析方法,能 ...
- Entity Framework 学习
Entity Framework 学习初级篇1--EF基本概况 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry. ...
- LeetCode--003--无重复字符的最长子串(java)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- 在mk/rte.app.mk 256行加echo $(O_TO_EXE_DO)查看GCC参数
在mk/rte.app.mk 256行加echo $(O_TO_EXE_DO)查看GCC参数,如:
- 使用jquery.mobile和WebSQL实现记事本功能
1.记事本列表页 1.1.页面结构与样式: <div data-role="page" id="home"> <div data-role=& ...
- 一个不该写的bat
新建bat文件,放到D盘根目录 %0|%0 进入到C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Program ...
- django 中基于类的视图
django 视图 分为两种: 1. FBV 基于函数的视图 function based view 2. CBV 基于类的视图 class based ...
- BigInteger 类 和 BigDecimal 类
一 .BigInteger BigInteger类在计算和处理任意大小的整数方面是很有用的. BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的. BigInte ...