You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:39:01