HSSFWorkbook + form + HttpServletResponse 实现excel的下载

今天做了excel的导出下载,折腾了一天才发现ajax的dataType里面没有流类型,这就意味着不能用ajax来接受后台传来的输出流。但是可以用动态创建的form来代替。

下面是项目实践的部分源码:

1、后台Controller层(HSSFWorkbook创建excel的过程我写在了Service层,这里就不粘贴出来了):

 1 //导出excel
 2     @RequestMapping(value="/outPutExcel",method=RequestMethod.POST)
 3     public @ResponseBody void outPutExcel(HSSFWorkbook workbook,HttpServletRequest request,HttpServletResponse response) throws IOException{
 4         //获取参数
 5         String nd=request.getParameter("nd");
 6         String co_code=request.getParameter("co_code");
 7         //excel下载设置
 8         OutputStream out=response.getOutputStream();
 9         response.setHeader("Content-Type","application/vnd.ms-excel");
10         response.addHeader("Content-Disposition","attachment;filename=mydata.xls");
11         response.setContentType("application/octet-stream");
12         response.setCharacterEncoding("UTF-8");
13         workbook=outPutExcelService.outPutExcel(nd, co_code);
14         try{
15             //返回数据流
16             workbook.write(out);
17             out.flush();
18             out.close();
19         }finally{
20             out.flush();
21             out.close();
22         }
23     }

2、前端js源码(需要注意18行,action的值前加了一个‘.‘ ,不然可能会404 ):

 1 //获取选择路径,并导出excel
 2         viewModel.saveExcel=function(){
 3             var co_code="";
 4             var nd=$("#select_nd_info").val();  //选择年度
 5             var dw_value = $("#select_dw_info").val();
 6             var info=viewModel.ipCompDataTable.getSimpleData();
 7             for(var i=0;i<info.length;i++){
 8                 if(dw_value===info[i].co_name){
 9                     co_code=info[i].co_code;
10                     break;
11                 }
12             }
13             //定义form,因为ajax不能接受 流类型数据
14             var form = $("<form>");
15             form.attr(‘style‘,‘display:none‘);
16             form.attr(‘target‘,‘‘);
17             form.attr(‘method‘, ‘post‘);
18             form.attr(‘action‘, ‘./data_status/outPutExcel‘);
19
20             var input1 = $(‘<input>‘);
21             input1.attr(‘trpe‘,‘hidden‘);
22             input1.attr(‘name‘, ‘nd‘);
23             input1.attr(‘value‘, nd);
24
25             var input2 = $(‘<input>‘);
26             input2.attr(‘trpe‘,‘hidden‘);
27             input2.attr(‘name‘, ‘co_code‘);
28             input2.attr(‘value‘, co_code);
29             //将表单放到body中
30             $(‘body‘).append(form);
31             form.append(input1);
32             form.append(input2);
33             form.submit();
34             form.remove();
35         }

3、运行项目,ok!

希望对你有帮助!

时间: 2024-10-06 13:55:30

HSSFWorkbook + form + HttpServletResponse 实现excel的下载的相关文章

关于数据筛选后Excel导出下载

2016.5.11 二种方法: 前台筛选器 1.生成文件流下载 ①后台接受form表单,拼接sql public void Down(StudentI i, int Status = 0) { List<string> ls = new List<string>(); List<SqlParameter> lp = new List<SqlParameter>(); if (i.RecommName != null) { ls.Add("[emai

list数据导出excel并且下载到本地

最近做grid列表相关数据导出到excel功能,根据自己选择的列导出成excel 并且下载到本地.下载位置根据配置文件进行的配置.废话不说 直接上关键代码: 需要引入相关的包: compile 'net.sourceforge.jexcelapi:jxl:2.6.12'这是我项目中gradle的配置. @Override public void exportExcel(Integer[] ids,HttpServletResponse response) { List<WithdrawDepos

NPOI生成excel并下载

NPIO文件下载地址:http://npoi.codeplex.com/ 将文件直接引用至项目中即可,,,,, 虽然网上资料很多,但有可能并找不到自己想要的功能,今天闲的没事,所以就稍微整理了一个简单的例子,希望自己在以后的项目中用得着,到时候就不用在网上查找了,直接把代码copy过来就可以啦~~~~主要是在mvc控制器里面敲的,直接贴代码了..... 1.逻辑代码 public EmptyResult ExportExcle() { HSSFCellStyle style; HSSFFont

asp.net 将dt转换成excel 在线下载

1.方法 private StringWriter GetStringWriter(DataTable dt) { StringWriter sw = new StringWriter(); //读列名 foreach (DataColumn dc in dt.Columns) sw.Write(dc.ColumnName + "\t"); //读列值 //重新的一行 sw.Write(sw.NewLine); if (dt != null) { foreach (DataRow dr

Java导出excel并下载功能

我们使用的导出并下载功能是利用一个插件叫POI的插件提供的导出功能,很实用:首先先导入Jar包: Jar包下载地址:http://poi.apache.org/   官方文档地址:http://poi.apache.org/spreadsheet/quick-guide.html Action代码: public void exportToExcel(List<PortalContactVO> data) throws Exception { this.setEnableAccessReque

数据库内容导出为excel并下载

        /**          *Controller层          */         @RequestMapping("/downUserInfo") public void downUserInfo(HttpServletRequest request, HttpServletResponse response) { try { djsService.downUserInfo(request, response); } catch (Exception e) {

Springboot导出Excel并下载

引入相关依赖 <!--数据导出excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependenc

poi apache compress实现excel压缩下载

try { //构造40W条数据     List<Branch> list =  this.getBranch();     HSSFWorkbook workbook = Service.createHSSFWorkbook(list);     String fileName = "中文名字哈哈哈";     OutputStream out = new BufferedOutputStream(response.getOutputStream());  //压缩下载

数据使用Excel导出下载

此方法导出格式为xls 前端使用a标签链接实现 使用button按钮利用ajax传递请求时会报错,这里需要注意,此问题后期探讨,具体实现方式后期更新再议 Excel导出工具类 public class ExcelUploadUtil { static final short borderpx = 1; /** * 导出excel表格 * @param head 表头 * @param body 数据信息 * @return */ public static HSSFWorkbook expExc