ajax实现excel报表导出的方法

  介绍

这篇文章给大家分享的是有关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报表导出的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

ajax实现excel报表导出的方法