浏览器不能下载response输出的excel

是否使用ajax提交

用ajax提交是不行的,因为ajax基于XMLHttpRequest ,XMLHttpRequest 的定义就是:可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容。而我们的Excel是二进制流。所以Excel会被强转成文本,就像乱码一样。(效果类同你用记事本打开Excel文件

测试代码是否正确

在浏览器直接访问下载的URL,如果能自动下载。ok,代码没问题。

常见错误

1.传参问题

如果用浏览器直接访问是get请求,后台不能用@RequestBody

2.响应的设置

首先方法要标记:@ResponseBody
然后response是设置
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ new String(("下载后Excel文件名称" + ".xlsx").getBytes(), "iso-8859-1"));

response写完后
response.flush();response.close();

代码正确,前端请求方式

form提交

var form = $("<form>");
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",rootPath + "user/expostUserExcel.do");
var input1 = $("<input>");
input1.attr("type","hidden");
input1.attr("name","strZipPath");
input1.attr("value",strZipPath);
$("body").append(form);
form.append(input1);
form.submit();
form.remove();

window.open/location.href等

a标签

iframe

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中导出包含多个sheet的Excel文件并实现浏览器下载的过程如下: 1. 首先,我们需要使用第三方库如Apache POI来操作Excel文件。 2. 创建一个Workbook对象,该对象可以表示整个Excel文件。 3. 使用Workbook对象创建多个Sheet对象,分别表示不同的工作表。 4. 在每个Sheet对象中,使用Row和Cell对象来创建数据行和单元格。 5. 将需要导出的数据填充到每个Sheet的相应单元格中。 6. 完成数据填充后,使用HttpServletResponse对象设置响应头,指定文件类型为Excel文件(application/vnd.ms-excel)。 7. 使用OutputStream对象将Workbook对象写入到输出流中,实现导出。 8. 关闭输出流和Workbook对象。 示例代码如下: ```java // 导出包含多个sheet的Excel文件 public void exportExcel(HttpServletResponse response) { try { // 创建Workbook对象,表示整个Excel文件 Workbook workbook = new HSSFWorkbook(); // 创建第一个Sheet对象 Sheet sheet1 = workbook.createSheet("Sheet1"); // 在第一个Sheet中创建数据行和单元格 Row row1 = sheet1.createRow(0); Cell cell1 = row1.createCell(0); cell1.setCellValue("数据1"); // 创建第二个Sheet对象 Sheet sheet2 = workbook.createSheet("Sheet2"); // 在第二个Sheet中创建数据行和单元格 Row row2 = sheet2.createRow(0); Cell cell2 = row2.createCell(0); cell2.setCellValue("数据2"); // 设置浏览器下载的响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=exported_excel.xls"); // 获取输出流 OutputStream outputStream = response.getOutputStream(); // 写入到输出流中 workbook.write(outputStream); // 关闭输出流和Workbook对象 outputStream.close(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } ``` 以上代码可以实现导出包含两个sheet的Excel文件,并且通过浏览器下载。其中,我们通过设置响应头使浏览器输出结果作为Excel文件下载,文件名为exported_excel.xls。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值