实现效果:

项目中使用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:提供下载)的更多相关文章

  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. 动态规划-最大的正方形面积 Maximal Square

    2018-09-13 19:19:44 问题描述: 问题求解: 方法一: 使用动态规划来求解,算法时间复杂度O(n^2). dp[i][j] : 以(i, j)为右下角的面积最大的正方形的边长. 初始 ...

  2. (转)UCOSII源代码剖析

    启动工作原理 刚接触操作系统的时候觉得这个最神秘,到底里面做了什么,怎么就成了个操作系统,它到底有什么用,为什么要引进来着个东东.学了之后才知道,原来最根本的思想还是源于汇编里面的跳转和压栈,以调用一 ...

  3. Debian初始化配置

    1.解决中文显示乱码windows的宋体文件上传到debian的字体目录,并运行dpkg-reconfigure locales命令来设置系统的字体root@debian:~# mv simsun.t ...

  4. 第十章 Call 和 Ret 指令

    引言 想想程序之间的加载返回过程. call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP. call 和 ret 经常被共同用来实现自程序的设计. 这一章,我们讲解 c ...

  5. Vue Authentication And Route Handling Using Vue-router(详解)

    英文原文  (本文原出处),本博在原文的基础上,进一步分析代码的结构和解释代码. git 代码 创建一个app:  vue-router-auth 本文详解了如何使用vue-router建立路由记录对 ...

  6. 新项目的vue组件

    项目地址:http://pan.baidu.com/s/1qYIxCXu 很久没有写博客的原因的是之前一直在解决一个问题,这个问题就是:我们在写组件的时候,官方推荐把css写在组件里面,但是如果我们写 ...

  7. hadoop ssh 端口-ssh-copy-id详解

    ssh-copy-id详解 http://www.blogdaren.com/post-1815.html 服务器时常需要配置无密码的登录方式,最一般的设置方式如下: 使用ssh-keygen和ssh ...

  8. android -------- Eclipse下的NDK配置环境

    NDK 全称是Native Development Kit,是一个让开发人员在Android应用中嵌入使用本地代码编写的组件的工具集 原生开发工具包 (NDK) 是一组可让您在 Android 应用中 ...

  9. jq 倒计时

    引入jq 注 在IE和safari 如果时间出现NAN 将时间格式改为YYYY/MM/DD HH:MM:SS 例:var d2 = new Date("2019/02/18 15:59&qu ...

  10. 创建springboot的聚合工程(一)

    比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便.接下来 ...