[筆記] Sheet.js 搭配 zip.js 將 Excel 檔案包在一個密碼保護的 ZIP 中

這回在實務上遇到要幫生成的 Excel 檔案加上一點簡易的密碼防護。在 Node.js 的社群中,若「生成一個需要密碼提示才能打開的 .zip 檔」是有辦法的。其餘的思路截至 2023 年 3 月還暫時沒有突破口。

exam-sheet


內容

已知限制

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

按讚加入粉絲團

延伸閱讀