实现效果:

项目中使用JXL生成Excel,使生成的Excel可以让用户下载,如下图

一、生成Excel

二、提供下载

实现思路:

1、页面使用form表单提交方式(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>3</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;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overrideprotected 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");// 流的方式读取保存到服务器的ExcelDataInputStream in = new DataInputStream(new FileInputStream(new File(filePath)));// 流的方式输出到浏览器,可下载OutputStream out = resp.getOutputStream();int bytes = 0;byte[] bufferOut = new byte[1024];  while ((bytes = in.read(bufferOut)) != -1) {  out.write(bufferOut, 0, bytes);  }out.close();in.close();//删除刚才保存到服务器的路径的Excel
            RemoveDirectoryUtil.delSingleFile(filePath);} catch(Exception e){e.printStackTrace();}}}

JXL生成Excel,并提供下载(2:提供下载)相关推荐

  1. java使用jxl生成excel表格,jsp使用js下载excel文件xls

    java使用jxl生成excel表格,jsp使用js下载excel文件 后端代码 maven jar包 主体代码逻辑 引入的jar包 具体代码段 重点详解 表头和表格内容两种格式 直接将 HttpSe ...

  2. JXL生成EXCEL时单元格设置为数值却展示货币或自定义的问题处理

    前言: 以下内容为个人见解,勿喷,欢迎有更好解决方法的大佬指点 问题起源: 最近项目中有一个这样的需求:根据后台数据生成Excel后转存到服务器上供用户进行下载.这本来是一个比较常见的需求,不存在什么 ...

  3. 打印系列 —— 利用jxl生成Excel

    jxl的安装: 主要就是将jxl的包放在WEB-INF的classes下面(如果下载到的是.jar文件,就放在lib下面).别忘了将jxl包中的common文件夹也放在WEB-INF下面. jxl的使 ...

  4. exls下载后显示jsp_jsp利用POI直接生成Excel并在页面提示打开下载

    java中导出Excel有两个组件可以使用,一个是jxl,一个是POI,我这里用的是POI.导出是可以在服务器上生成文件,然后下载,也可以利用输出流直接在网页 中弹出对话框提示用户保存或下载.生成文件 ...

  5. poi jxl 生成EXCEL 报表

    http://www.iteye.com/topic/611329 前2天后台系统需要生成报表,正好抽时间复习了一下之前做过的JAVA生成EXCEL,下面介绍POI 和JXL 生成报表的2种方式. 1 ...

  6. Java后台通过jxl生成Excel表格

    这里封装了一个工具类,将对象的list集合解析生成表格,只要按照参数要求传参就好了. 工具类代码如下: package com.hd.erpreport.utils;import java.io.Fi ...

  7. android jxl生成excel,Android Jxl读写Excel

    Android Studio 依赖compile 'net.sourceforge.jexcelapi:jxl:2.6.12' 本测试在Exlipse中, 由于Jxl的跨平台性.创建Excel表/** ...

  8. Asp.net生成Excel文件并下载(解决使用迅雷下载页面而不是文件的问题)

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 先试用Response.WriteFile的方法: FileInfo fi = new FileInfo(excelFile); ...

  9. 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 生成Excel文件的方法,见:[原].Net创建Excel文件(插入数据.修改格式.生成图表)的方法 先试用Response.W ...

最新文章

  1. vb.net webclient 网络目录是否存在_牛眼IPO | 怡合达IPO申请待审核 产品目录被指涉嫌侵权...
  2. DevExpress 中 在做全选的全消功能的时候 加快效率
  3. LeetCode OJ:Construct Binary Tree from Preorder and Inorder Traversal(从前序以及中序遍历结果中构造二叉树)...
  4. Angular Route数据结构里常用字段使用方法一览
  5. MongoDB(4)--MongoDB服务的启动
  6. 基于python的文件加密传输_基于python实现文件加密功能
  7. python time localtimeq获取准确时间_python的内置模块time和datetime的方法详解以及使用(python内的time和datetime时间格式)...
  8. 用Java语言编写的特殊算法
  9. 用php写出显示客户端ip与服务器ip的代码.,PHP面试题答案
  10. 【AD】mm,mile,inch+电流大小同线宽关系
  11. 查看window重启日志
  12. python paramiko_Python3之paramiko模块
  13. keras利用flow_from_directoryt自己构建数据集
  14. pdf照片显示正常打印时被翻转_你确定你会打印准考证了?89%的人都不会!
  15. PubYun动态域名
  16. 不同方式实现IP访问限制
  17. YOLOv5中autoanchor.py的def metric(k)的r = wh[:, None] / k[None]的理解
  18. 电路模电数电课程中卡诺图知识点(包括化简原则和步骤)
  19. 步进电机应用c语言程序设计实例,51单片机调节步进电机应用C语言程序设计
  20. 程序员必备的6款工具软件,炒鸡实用!

热门文章

  1. linux系统防火墙配置浅谈
  2. chatterbot mysql_ChatterBot代码解读-介绍和框架
  3. 分享一位电商大佬的技术笔记
  4. 学会使用 GDB 调试 Go 代码
  5. 图文结合,白话Go的垃圾回收原理
  6. springboot实现快速整合mybatis+mysql
  7. 金融壹账通京交会发布区块链白皮书 详解如何成功解决行业痛点
  8. Spring Boot 1.5.10 发布:修复重要安全漏洞!!!
  9. python的学习笔记/002-5(2018-5-21)
  10. 紫书 习题 8-15 UVa 1617 (贪心)