代码拉取完成,页面将自动刷新
/**
* @param {Array} titleList 传入的标题数据和需要导出的key
* @param {Array} dataSource 传入的数据源
* @param {String} fileName 导出的文件名
*/
function tableToExcel(titleList = [], dataSource = [], fileName = "") {
//要导出的标题
// 处理数据 这样做是为了在很多数据的时候 导出自己想要的数据
let newDataSource = []
dataSource.forEach((item, index) => {
let tep = {};
titleList.forEach(({ key }) => {
tep[key] = key.split(".").reduce((prop, objKey) => {
try {
return prop[objKey]
} catch (e) {
return undefined
}
}, item)
})
newDataSource.push(tep)
})
// console.log(newDataSource)
let str = '<tr>';
for (let i = 0; i < titleList.length; i++) {
str += `<td>${titleList[i].title + '\t'}</td>`;
}
str += '</tr>';
str += '<tr>';
for (let i = 0; i < newDataSource.length; i++) {
for (let item in newDataSource[i]) {
let news = newDataSource[i][item] ? newDataSource[i][item] : "";
//style="mso-number-format:\'@\'" =>excel科学计数
//\t制表符 tab到下一行
str += `<td style="mso-number-format:\'@\'">${news + '\t'}</td>`;
}
str += '</tr>';
}
var uri = 'data:application/vnd.ms-excel;base64,';
var template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head><meta charset="UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
<x:Name>${fileName}</x:Name>
<x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
</head><body><table>${str}</table></body></html>`;
var base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
var link = document.createElement("a");
link.href = uri + base64(template);
link.download = fileName ? fileName + ".xls" : "数据.xls";//当前下载的excel名称
document.body.appendChild(link);
link.innerHTML = "点击下载"
// console.log(unescape(encodeURIComponent(template)))
link.click();
document.body.removeChild(link);
}
export default tableToExcel
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。