js导出excel文件
2022-09-07 本文已影响0人
WangYatao
主要代码
export const tableToExcel = (jsonData, header) => {
// 循环遍历,每行加入tr标签,每个单元格加td标签
for (let i = 0; i < jsonData.length; i++) {
header += "<tr>";
for (const key in jsonData[i]) {
// 增加\t为了不让表格显示科学计数法或者其他格式
header += `<td>${jsonData[i][key] + "\t"}</td>`;
}
header += "</tr>";
}
// Worksheet名
const worksheet = jsonData[0].deptName;
const uri = "data:application/vnd.ms-excel;base64,";
// 下载的表格模板数据
const 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><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
<x:Name>${worksheet}</x:Name>
<x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
</head><body><table>${header}</table></body></html>`;
// 下载模板
const link = document.createElement("a");
link.href = uri + base64(template);
// 对下载的文件命名
link.download = `${worksheet}.xlsx`;
link.click();
};
// 输出base64编码
const base64 = (s) => window.btoa(unescape(encodeURIComponent(s)));
调用方法
const auditList = ["逻辑性审核", "合理性审核", "核实性审核"];
const tableStr =
"<tr><td>公司名称</td><td>所在报表</td><td>公式编码</td><td>审核类型</td><td>公式说明</td><td>提示内容</td><td>出错说明</td></tr>";
const exportJson = this.errorList.map((item) => {
const obj = {};
let theReport = null;
item.Row.forEach((item1) => {
theReport = theReport
? theReport + ","
: " " + item1.moduleCode + item1.moduleName;
});
obj["deptName"] = item.deptName;
obj["theReport"] = theReport;
obj["code"] = item.Code;
obj["auditType"] = auditList[item.AuditType];
obj["error"] = item.error;
obj["formula"] = item.Formula;
obj["errorMsg"] = item.errorMsg;
return obj;
});
tableToExcel(exportJson, tableStr);