#請益 #NodeJs 以buffer傳遞xlsx內容,但下載的檔案損毀
國立臺北護理健康大學
如題,
以下是我的ejs檔(手機排版請見諒🙏🏻)
$(window).on("load", async function () {
await $.ajax({
'type': 'GET',
'url': "/Download/orderTypeCSV"
}).done((result, status, xhr) => {
if (status) {
try {
const buffer = result;
const blobData = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet});
const url = URL.createObjectURL(blobData);
const link = document.getElementById("summaryTable");
link.href = URL.createObjectURL(blobData);
link.download = 'data.xlsx';
}
catch (err) {
console.log(err);
}
};
});
});
以下是ts檔(typescript)
router.get("/Download/orderTypeCSV", async (req: any, res: any, next) => {
var workbook = new ExcelJS.Workbook(); // 創建試算表檔案
workbook.creator = "Web";
var sheet = workbook.addWorksheet('工作表範例'); //在檔案中新增工作表 參數放自訂名稱
sheet.addTable({ // 在工作表裡面指定位置、格式並用columsn與rows屬性填寫內容
name: 'table', // 表格內看不到的,讓你之後想要針對這個table去做額外設定的時候,可以指定到這個table
ref: 'A1', // 從A1開始
columns: [{ name: '名字' }, { name: '年齡' }, { name: '電話' }],
rows: [['小明', '20', '0987654321'], ['小美', '23', '0912345678']]
});
//將工作簿的內容寫入到內存緩衝區
workbook.xlsx.writeBuffer().then((buffer) => {
try {
res.status(200).send(buffer);
}
catch (error) {
console.log(error);
}
});
我利用workbook.xlsx.writeBuffer(),將xlsx的檔案內容傳喚前端,且按下summaryTable按鈕也會生成excel,但打開會跑出下面錯誤
一直找不出是哪裡錯了,我把它和可以正常開起的檔案內容做比對
左邊是可以正常開啟的,右邊的是我利用程式生成的
它有可能會是因為缺少來源而內容損壞嗎,要如何修正
請求各位大神幫忙🥺


寫法參考來源: