ajax实现excel报表导出_AJAX相关

来源:脚本之家  责任编辑:小易  

function getExcel(){ var tabHtml=$("#tb_Class").html();post("./Ajax/GetExcel",{ tab:encodeURIComponent(tabHtml)});} Controler:public void GetExcel(){ string sHtml=Server.UrlDecode(Request.Form["tab"]);Exportwww.zgxue.com防采集请勿采集本网。

利用ajax实现excel报表导出【解决乱码问题】,供大家参考,具体内容如下

1.如果有“输出”按键(绿色向右小箭头→)就直接用输出-本地文件-电子表格 2.没有小箭头→的就从表头清单-输出-本地文件-电子表格

背景

项目中遇到一个场景,要导出一个excel报表。由于需要token验证,所以不能用a标签;由于页面复杂,所以不能使用表单提交。初步考虑前端使用ajax,后端返回流,定义指定的header。

可以尝试用FineReport报表软件,纯Java编写,它可以无缝导入导出excel,报表服务器比较牛,对大数据量的数据库也能应付。

第一版

主要代码

1、在〖套价库〗窗口,点右键,数据(导入/导出),导入从EXCEL文件;2、在弹出的对话框中点击左抄上角的路径按钮找excel文件的路径,将需要导入的百excel文件打开;3、分别输入定额号,定额名称

前端

使用jquery的ajax

编程我不会,帮不了你了

var queryParams = {"test":"xxx"};var url = "xxx";$.ajax({ type : "POST", //提交方式 url : url,//路径 contentType: "application/json", data: JSON.stringify(queryParams), beforeSend: function (request) { request.setRequestHeader("Authorization", "xxx"); }, success : function(result) { const blob = new Blob([result], {type:"application/vnd.ms-excel"}); if(blob.size < 1) { alert('导出失败,导出的内容为空!'); return } if(window.navigator.msSaveOrOpenBlob) { navigator.msSaveOrOpenBlob(blob, 'test.xls') } else { const aLink = document.createElement('a'); aLink.style.display = 'none'; aLink.href = window.URL.createObjectURL(blob); aLink.download = 'test.xls'; document.body.appendChild(aLink); aLink.click(); document.body.removeChild(aLink); } }});

你发过来我帮你测试 一下是什么原因,一般情况 是你的单元格设置的问题,或者就是你的excel文件 的设置如果是2007的你点一下公式 计算选项 那里把手动改为自动 fanwei0602@163.com

后端

使用easypoi(如何使用easypoi请自行百度)

import cn.afterturn.easypoi.excel.ExcelExportUtil;import cn.afterturn.easypoi.excel.entity.ExportParams;@PostMapping(value = "/download")public void downloadList(@RequestBody Objct obj, HttpServletResponse response) { ...... List<Custom> excelList = new ArrayList<>(); // excel总体设置 ExportParams exportParams = new ExportParams(); // 指定sheet名字 exportParams.setSheetName("test"); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, Custom.class, excelList); response.setContentType("application/vnd.ms-excel"); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("test", "utf-8") + ".xls"); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); ...... }

测试结果

excel能正常导出,但下载下来的excel全是乱码。经过各种找答案,整理了一下可能是以下原因导致:

1、后端未设置字符集,或者在spring框架的过滤器中统一设置了字符集;

2、前端页面未设置字符集编码;

3、需要在ajax中添加 request.responseType = “arraybuffer”;

经过不断测试,我的应该是第三点导致。但在jquery ajax 中添加后仍然不起作用,乱码问题始终无法解决。

第二版

主要代码

1、在〖套价库〗窗口,点右键,数据(导入/导出),导入从EXCEL文件;2、在弹出的对话框中点击左抄上角的路径按钮找excel文件的路径,将需要导入的百excel文件打开;3、分别输入定额号,定额名称

前端,使用原生的ajax。后端未变动。

var xhr = new XMLHttpRequest();xhr.responseType = "arraybuffer"; xhr.open("POST", url, true);xhr.onload = function () { const blob = new Blob([this.response], {type:"application/vnd.ms-excel"}); if(blob.size < 1) { alert('导出失败,导出的内容为空!'); return; } if(window.navigator.msSaveOrOpenBlob) { navigator.msSaveOrOpenBlob(blob, 'test.xls') } else { const aLink = document.createElement('a'); aLink.style.display = 'none'; aLink.href = window.URL.createObjectURL(blob); aLink.download = 'testxls'; document.body.appendChild(aLink); aLink.click(); document.body.removeChild(aLink); return; }}xhr.setRequestHeader("Authorization", "xxx");xhr.setRequestHeader("Content-Type", "application/json");xhr.send(JSON.stringify(queryParams));

测试结果

下载的excel不再乱码,原生ajax中使用 “arraybuffer” 使用是生效的。

总结

“arraybuffer” 这个参数导致的excel导出乱码,在原生的ajax中设置是有效的,在jquery的ajax中暂时还没找到生效的方式。

会的。当你发出请求本质就是建立了和服务器的socket通信。你把请求发出去,action还没有返回数据,你又请求了另外的页面。这个会将之前的连接关闭,那么action无法返回数据到页面。如果你想确定发送数据出去,action返回,前台选择保存或者取消。那么最好在点击了下载文件功能后,将网页设置遮罩层,提示文件正在请求中。这样用户就无法点击其他操作。当action返回数据后,再将网页遮罩层取消即可!内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • php使用ajax的post方式下载excel文件简单示例
  • 使用ajax生成的excel文件并下载的实例
  • 原生js封装ajax 传json,str,excel文件上传提交表单(推荐)
  • jquery ajax请求导出excel表格的实现代码
  • ajax 仿excel表格功能
  • 判断请求头中是否含有某属性来判断是否是ajax请求
  • js与jquery实现的兼容多浏览器ajax请求实例
  • django ajax提交评论并自动刷新功能的实现代码
  • 用ajax实现在单击事件下加载一个div层的脚本
  • ajax添加数据即时显示信息篇
  • 添加后台list给前台select标签赋值简单实现
  • ajax实现页面加载和内容删除
  • asp简单的ajax留言板
  • jquery通过ajax从后台获取信息并显示在表格上的实现类
  • ajax获取页面被缓存的解决方法
  • Ajax实现excel导出
  • 用ajax无法实现导出excel怎么解决
  • 如何用ajax导出excel-CSDN论坛
  • 报表如何实现自动导出到excel
  • [求助]如何把SAP报表导出到EXCEL
  • JAVA如何实现导出大数量EXCEL报表 数据大概100W条
  • 怎样未来清单导出到EXCEL表
  • ajax导出excel
  • excel表中为什么不能复制公式,表格是从报表软件上导出的,无论怎么粘帖都是至粘帖之前复制的数值。
  • 用友软件报表怎么导出EXCEL格式?电脑已安装EXCEL了谢谢
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页php使用ajax的post方式下载excel文件简单示例使用ajax生成的excel文件并下载的实例原生js封装ajax 传json,str,excel文件上传提交表单(推荐)jquery ajax请求导出excel表格的实现代码ajax 仿excel表格功能判断请求头中是否含有某属性来判断是否是ajax请求js与jquery实现的兼容多浏览器ajax请求实例django ajax提交评论并自动刷新功能的实现代码用ajax实现在单击事件下加载一个div层的脚本ajax添加数据即时显示信息篇添加后台list给前台select标签赋值简单实现ajax实现页面加载和内容删除asp简单的ajax留言板jquery通过ajax从后台获取信息并显示在表格上的实现类ajax获取页面被缓存的解决方法jquery ajax 向后台传递数组参数ajax readystate的五种状态详解ajax中的async属性值之同步和异步jquery实现ajax定时刷新局部页面ajax传递多个参数具体实现ajax获取数据中文乱码问题最简单jquery ajax中使用serialize()方ajax获取数据然后显示在页面的实自己动手打造ajax图片上传(网上没ajax 缓存问题的两种解决方法(ieajax无刷新url提交页面jquery ajax提交表单从action传值到jsp实ajax上传图片及上传前先预览功能实例代码ajax 汇总以及初步评价ajax缓存问题的解决方法汇总jquery中ajax提交表单几种方法(get、postjquery ajax实现文件上传功能实例代码ajax实现简单的注册页面异步请求实例代码ajax传送参数含有特殊字符的快速解决方法ajax添加数据即时显示信息篇
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved