這回在實務上遇到要幫生成的 Excel 檔案加上一點簡易的密碼防護。在 Node.js 的社群中,若「生成一個需要密碼提示才能打開的 .zip 檔」是有辦法的。其餘的思路截至 2023 年 3 月還暫時沒有突破口。
內容
已知限制
Node.js 社群缺乏「針對 Excel 檔案本身的加密」的相關套件
1. SheetJS ( a.k.a xlsx at npm ),不支援「開啟時輸入密碼
2. xlsx-populate 套件無法與 Vue3 + TS 相容,這也是唯一可「針對 Excel 檔案內的活頁簿」加密的套件
產出「密碼保護的 zip」套件有限
1. minizip-asm.js:雖可用但缺乏後續維護,不考慮
2. adm-zip, jszip, archiver, node-zip, pizZip 皆不支援產出密碼保護的 zip
3. @zip.js/zip.js,有成功試出,也有後續維護,但需升級 node 核心版本到 v16.5.0 以上。若採用現有的 node 14 版本,最多只能用到 @zip.js/zip.js 的 2.6.8 版本
程式碼
Excel 檔案的內容有一部分就是 XML 結構。這點 sheet.js 套件已經整理的很完善,你可取得其輸出的 Buffer 資料流,再丟到 zip.js 處理
參考資料
1. zip.js
2. A beginner’s guide to parse and create XML with Node.js
3. SheetJS – Data Export