GG资源网

excel导出,带上token,二进制流输出(AJAX 如何实现 Excel 报表导出)

excel导出,带上token,二进制流输出

function ExcelExport() {

addcloud();

var url = host_name + "terminal/download?filter=" + $("#search").val() + '&status=' + tstatus;

var xhr = new XMLHttpRequest();

xhr.open('Get', url, true); // 也可以使用POST方式,根据接口

xhr.responseType = "blob"; // 返回类型blob

xhr.setRequestHeader("Authorization", 'Bearer ' + User.access_token);

xhr.setRequestHeader("groupid", GetApplicationId());

// 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑

xhr.onload = function () {

// 请求完成

if (this.status === 200) {

// 返回200

var createObjectURL = (window.URL || window.webkitURL || {}).createObjectURL || function () { };

var blob = null;

var content = this.response;

var mimeString = "application/vnd.ms-excel";

window.BlobBuilder = window.BlobBuilder ||

window.WebKitBlobBuilder ||

window.MozBlobBuilder ||

window.MSBlobBuilder;

if (window.BlobBuilder) {

var bb = new BlobBuilder();

bb.append(content);

blob = bb.getBlob(mimeString);

} else {

blob = new Blob([content], { type: mimeString });

}

var url = createObjectURL(blob);

var a = document.createElement("a");

a.href = url

a.download = "Terminals.xls";

$("body").append(a);

setTimeout(removecloud(), 1000);

a.click();

$(a).remove();

}

else {

swal("下载失败", "", "error");

}

};

// 发送ajax请求

xhr.send()

}

AJAX 如何实现 Excel 报表导出

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

背景

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

第一版

主要代码

前端

使用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);

}

}

});

后端

使用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 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 中添加后仍然不起作用,乱码问题始终无法解决。

第二版

主要代码

前端,使用原生的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” 使用是生效的。

以上就是AJAX 如何实现 Excel 报表导出的详细内容,更多请关注网站的其它相关文章!

AJAX 如何实现 Excel 报表导出 (https://www.wpmee.com/) javascript教程 第1张

由于网站搬家,部分链接失效,如无法下载,请联系站长!谢谢支持!
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » excel导出,带上token,二进制流输出(AJAX 如何实现 Excel 报表导出)

发表回复

CAPTCHAis initialing...