前言: 后端 nodejs 中, 要导出 excel 数据, 数据的格式可以用 Buffer, 而前端接收数据后, 需要正确的转换格式才能显示.
后端代码
''' 省略上面 ExcelJS 创建 excel 的过程
const buffer: Buffer = await workbook.xlsx.writeBuffer();
const fileName = `ProjectTracking.xlsx`
return { data: buffer, fileName, mimetype: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' };
这里输出的是 data 是 Buffer 格式
前端 Vue 代码
try {
let res = await apiManager.exportExcel(trckingParams)
// 正常取得 data 后, 要转换为 Buffer 格式
const fileBinary = Buffer.from(res.data.data, 'binary');
// 然后在转为 Blob 格式, 用 saveAs 库, 保存到硬盘.
const blob = new Blob([fileBinary], { type: res.data.mimetype });
await saveAs(blob, res.data.fileName)
return false
} catch (error) {
console.error(error);
return false
}
上面前端代码要点是, data 的数据要先转为 Buffer 格式, 然后在转为 Blob 格式导出. 可以不用 saveAs, 直接用 a 标签导出也行.