最近做项目前端需要操作复杂的excel复合表头,后端只是把数据返回;前端动态产生excel并支持下载。
但是下载excel后问题如下:
点击“是”打开后变成修复的excel了。
现在不清楚哪里的问题,我上代码请求各位大咖帮忙分析下如何解决:
<script>
const ExcelJS = require('exceljs');
const FileSaver = require('file-saver');
export default {
methods: {
async downloadExcelFile() {
const workbook = new ExcelJS.Workbook();
let worksheet = workbook.addWorksheet('sheet1', {
properties: {
showGridLines: true
}
}) ;
worksheet.columns = [{
header: '序号',
key: 'num'
}];
for (var i = 1; i < 10; i++) {
worksheet.addRow({
"num": i
});
};
await workbook.xlsx.writeBuffer().then((buffer) => {
let blob = new Blob([buffer], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
});
FileSaver(blob, "ReportFile.xlsx");
}).catch((error) => {
rt.showErrorToast(error);
});
}
}
}
</script>
或者使用如下代码下载excel问题还是一样的:
//第二种下载方式:
workbook.xlsx.writeBuffer().then(data => {
var blob = new Blob([data], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
});
var url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.href = url;
a.download = this.excelFileName;
a.click();
document.body.removeChild(a); // 下载完成移除元素
window.URL.revokeObjectURL(href);
});