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. 以上两者的原 ...
随机推荐
- MySQL processlist/kill
1.show full processlist 显示MySQL所有正在执行的进程,用于查看当前的MySQL运行情况,避免死锁等导致的异常情况. 主要的列: Id:进程Id User:登录账号 Host ...
- nodejs实现文件的拷贝复制
var fs = require( 'fs' ), stat = fs.stat; /* 05 * 复制目录中的所有文件包括子目录 06 * @param{ String } 需要复制的目录 07 * ...
- php oracle数据库NCOLB字段ORA-01704
php oracle数据库NCOLB字段ORA-01704 对clob更新 ORA-01704: 字符串文字太长 解决办法:把字符赋值给一个变量,然后赋值update语句 declarev_clob ...
- php解析处理java的btye字节;php解析处理java的ByteArrayOutputStream字节流/数据流
php解析处理java的btye字节:php解析处理java的ByteArrayOutputStream字节流/数据流 一般java的字节流: 就是t public class Test { publ ...
- java日志及异常错误信息输出的问题
1.异常信息可以层层传递,直到最后一层再输出日志也来得及 2.错误信息要在发生错误的当时就输出日志,否则到了其它层,很难得到准确的错误信息内容
- hdu-2421 Deciphering Password 数学姿势
给定A,B,对于A^B的每一个因子,M为其因子的因子数的三次方求和. 容易推导得出A^B的每一个因子都是A的质因子的组合(质因子可重复利用),其因子数自然等于所使用的每个质因子的数量乘积. 假设A由质 ...
- es-aggregations聚合分析
聚合分析的格式: "aggregations" : { "<aggregation_name>" : { "<aggregation ...
- 解决无法安装Microsoft .Net Framework 3.5
如果解决不了,试试我的方法吧,我也在网上找了好久,最终在本地解决了 所需工具:dism,和Net Framework 3.5,已经打包 链接:https://pan.baidu.com/s/1nKok ...
- 2.3 UML活动图
活动图定义 活动图描述了在一个过程中,顺序的/并行的活动及其之间的关系 应用于商业过程.工作流(业务过程).复杂算法的建模 活动图是顶点和弧的集合 活动节点 动作 流 对象值 注解和约束等 活动图基本 ...
- 5月21 汽车查询及批量删除----php方法
---恢复内容开始--- 这个与之前不同是在php中实现了页面的查询,引用AJAX实现批量删除及弹窗的显示 作业要求: 页面显示数据代码: <!DOCTYPE html PUBLIC " ...