JavaScript中使用SheetJS如何给Excel工作簿设置密码后通过Ajax上传
SheetJS生成带密码保护Excel并上传解决方案
核心前提:SheetJS(xlsx)社区开源版本原生不支持Excel工作簿打开加密功能,加密能力仅在其付费专业版提供。如果要在前端实现免费的加密需求,可以搭配xlsx-populate库完成,具体实现步骤如下:
步骤1:引入依赖
除已有的SheetJS外,额外安装xlsx-populate库:
npm install xlsx-populate
步骤2:生成基础工作簿二进制数据
保留你原有HTML表格转Excel的逻辑,先输出未加密的二进制内容:
// 原有HTML表格转工作簿逻辑 const wb = XLSX.utils.table_to_book(document.querySelector('#你的表格DOMID')); // 输出为Uint8Array二进制格式 const wbout = XLSX.write(wb, {bookType: 'xlsx', type: 'uint8array'});
步骤3:给工作簿添加密码保护并上传
import XlsxPopulate from 'xlsx-populate'; // 加载SheetJS生成的二进制文件 XlsxPopulate.fromDataAsync(wbout) .then(workbook => { // 设置工作簿打开密码 workbook.password('你的自定义密码'); // 输出加密后的二进制内容 return workbook.outputAsync(); }) .then(encryptedWbOut => { // 追加加密文件到FormData const formData = new FormData(); formData.append('Excel', new File([encryptedWbOut], 'Data.xlsx')); // 执行你的原有Ajax上传逻辑即可,示例: fetch('/你的服务端上传接口', { method: 'POST', body: formData }).then(res => res.json()).then(result => { // 处理上传返回结果 }) });
注意事项
- 加密后的文件建议使用
.xlsx后缀,老版.xls格式的加密兼容性更差,易出现加密失效问题 - 如果你仅需要禁止修改工作表内容,不需要限制打开权限,直接使用SheetJS社区版自带的工作表保护功能即可,无需额外依赖:
// 给第一个工作表设置修改保护密码 wb.Sheets[wb.SheetNames[0]].Protect = '你的修改保护密码'; - 如果你项目仅允许使用SheetJS,可以升级到SheetJS专业版,直接在write方法中添加
password配置项即可实现加密,无需引入其他库:// SheetJS Pro版本专属写法,社区版无该配置 const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'uint8array', password: '你的自定义密码' });
内容的提问来源于stack exchange,提问作者Namrata Mahajan
相关产品推荐
相关产品推荐

