介绍
这篇文章给大家分享的是有关ajax实现excel报表导出的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
利用ajax实现excel报表导出【解决乱码问题,供大家参考,具体内容如下
<强>背景强>
项目中遇到一个场景,要导出一个excel报表。由于需要令牌验证,所以不能用一个标签,由于页面复杂,所以不能使用表单提交。初步考虑前端使用ajax,后端返回流,定义指定的头。
<强>第一版强>
前端
使用jquery ajax的
var queryParams={“test":“xxx"}; var url=皒xx"; . ajax({美元 类型:“POST",//提交方式 url: url,//路径 contentType:“应用程序/json" 数据:JSON.stringify (queryParams), beforeSend:函数(请求){ request.setRequestHeader (“Authorization",“xxx"); }, 成功:函数(结果){ const blob=new blob([结果]{类型:“应用程序/vnd.ms-excel"}); 如果(blob)。大小& lt;1){ 警报(& # 39;导出失败,导出的内容为空! & # 39;); 返回 } 如果(window.navigator.msSaveOrOpenBlob) { 导航器。msSaveOrOpenBlob (blob, & # 39; test.xls& # 39;) 其他}{ const aLink=document.createElement(& # 39;一个# 39;); aLink.style。=& # 39;显示没有# 39;; aLink。href=https://www.yisu.com/zixun/window.URL.createObjectURL (blob); aLink。下载=皌est.xls”; document.body.appendChild (aLink); aLink.click (); document.body.removeChild (aLink); } } });
后端
使用easypoi(如何使用easypoi请自行百度)
进口cn.afterturn.easypoi.excel.ExcelExportUtil; 进口cn.afterturn.easypoi.excel.entity.ExportParams; @PostMapping (value=https://www.yisu.com/zixun//下载) 公共空间downloadList (@RequestBody Objct obj, HttpServletResponse响应){ …… <自定义列表> excelList=new ArrayList <> ();//excel总体设置 ExportParams ExportParams=new ExportParams ();//指定表名字 exportParams.setSheetName(“测试”); 工作簿工作簿=ExcelExportUtil。exportExcel (exportParams、自定义。类,excelList); response.setContentType(“应用程序/vnd.ms-excel”); 响应。addHeader(“附加”、“附件;文件名=" + URLEncoder。编码(“测试”、“utf - 8”) +“xls”); OutputStream OutputStream=response.getOutputStream (); workbook.write (outputStream); outputStream.flush (); outputStream.close (); …… }
<>强测试结果强>
excel能正常导出,但下载下来的excel全是乱码。经过各种找答案,整理了一下可能是以下原因导致:
1,后端未设置字符集,或者在春天框架的过滤器中统一设置了字符集;
2,前端页面未设置字符集编码;
3,需要在ajax中添加请求。responseType=" arraybuffer”;
经过不断测试,我的应该是第三点导致。但在jquery ajax中添加后仍然不起作用,乱码问题始终无法解决。
<强>第二版强>
前端,使用原生的ajax。后端未变动。
var xhr=new XMLHttpRequest (); xhr。responseType=癮rraybuffer"; xhr.open (“POST"、url、真实); xhr。onload=function () { const blob=new blob ([。反应),{类型:“应用程序/vnd.ms-excel"}); 如果(blob)。大小& lt;1){ 警报(& # 39;导出失败,导出的内容为空! & # 39;); 返回; } 如果(window.navigator.msSaveOrOpenBlob) { 导航器。msSaveOrOpenBlob (blob, & # 39; test.xls& # 39;) 其他}{ const aLink=document.createElement(& # 39;一个# 39;); aLink.style。=& # 39;显示没有# 39;; aLink。href=https://www.yisu.com/zixun/window.URL.createObjectURL (blob); aLink。下载=皌estxls”; document.body.appendChild (aLink); aLink.click (); document.body.removeChild (aLink); 返回; } } xhr。setRequestHeader(“授权”,“xxx”); xhr。setRequestHeader(“内容类型”、“application/json”); xhr.send (JSON.stringify (queryParams));
<强>测试结果强>
下载的excel不再乱码,原生ajax中使用“arraybuffer”使用是生效的。
感谢各位的阅读!关于ajax实现excel报表导出的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!