nodejs+jsxlsx使用文件流方式下載excel


本文介紹用 Node.js 中的依賴庫來處理 Excel 文件,主要利用js-xlsx庫來處理 Excel 文件。

問題:

  1.由於公司正式服務器的權限收的很緊,站點的linux賬戶沒有寫權限,無法利用寫文件的方式導出excel,於是查詢資料采用文件流的方式導出。

  2.因為不熟悉nodejs 導致無限踩坑。

js-xlsx github地址  https://github.com/SheetJS/sheetjs 

因為需要導出excel文件 則根據github上的文檔顯示可以采用這些方法 最簡單的如果沒有類似權限的其他限制 采用writeFile以寫文件的方式導出

如果也有類似的限制 writeFile這種方式就不是最佳選擇,查詢資料過后,准備以文件流的方式進行處理

jsxlsx 也提供了很簡單的處理  根據文檔write方式就可以滿足我的需要 在write_opts中設置我們需要的類型,諸如:

let buf = Excel.write(wb, {
type: 'buffer',
bookType: 'xlsx'
})
在此之前我們還需要將我們要導出的數據裝載如工作表中:
let ws = Excel.utils.aoa_to_sheet(data); //data就是我們的數據
let wb = Excel.utils.book_new();
Excel.utils.book_append_sheet(wb, ws, 'XX數據');
在經過這些步驟之后 我們導出的工作基本上已經完成了,但是別忘了因為是采用文件流的方式相應的設置也要加上
ctx.set('Content-disposition', 'attachment; filename=' + fileName);
ctx.type = "xlsx"
ctx.body = buf

前端在接收到后端返回的文件流時,利用Blob進行相應的處理:
const data = res.data;
const filename = res.headers['content-disposition'].split('=')[1]
// console.log(res.headers)
const url = window.URL.createObjectURL(
new Blob([data], {
type:
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
})
);
const link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM