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. 以上两者的原 ...
随机推荐
- 牛客网NOIP赛前集训营-提高组(第一场)B 数数字
数数字 思路: 数位dp 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...
- Python -- jpype JVM的第三方库使用
Python -- jpype 安装 jpype 如图:直接执行 命令:pip install jpype 可见失败,提示没有版本信息 可以使用 pip search jpype 查看相关版本信息 ...
- Angular 学习笔记 Material
以后都不会写 0 到 1 的学习记入了,因为官网已经写得很好了. 这里只写一些遇到的坑或则概念和需要注意的事情. Material Table 1. ng-content 无法传递 CdkColumn ...
- MySQL ICP(Index Condition Pushdown)特性
一.SQL的where条件提取规则 在ICP(Index Condition Pushdown,索引条件下推)特性之前,必须先搞明白根据何登成大神总结出一套放置于所有SQL语句而皆准的where查询条 ...
- three.js 制作一个简单的圆柱体模型
<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - or ...
- JFinal3.0 sql管理与动态生成
原文: 本节学习目标主要是使用JFinal中自带的Template Engin来实现对sql的管理.JFinal中为sql管理提供了3个指令#sql.#para.#namespace,来增强sql功能 ...
- English trip V1 - 12.Belongings 行李 Teacher:Jade Key: ?
In this lesson you will learn to describe your home life and things you own. 在本课中,您将学习如何描述您的家庭生活和您拥有 ...
- You Don't Know JS: this & Object Prototypes( 第2章 this)
this is a binding made for each function invocation, based entirely on its call-site (how the functi ...
- SQL的其他用法
SQL语言的其他用法 --求半径2米.高3米的圆柱体体积 select PI() select SQUARE(2)*PI()*3 '体积' --求字符串‘adsgdajfhwruhwuiriutoo ...
- 网络管理命令ping和arping
ping ping 向目标主机发送icmp请求包 常用来测试当前主机与目标主机网络连接状况 常见选项 -c 设置发包的个数 -s 设 ...