xiexienidehuangyan 2023-05-19 15:33 采纳率: 0%
浏览 138
已结题

关于#javascript#的问题:成功导出EXCEL,工作表也受保护了

vue使用ExcelJS4.3.0插件导出EXCEL中,工作表保护设置都成功了,就是密码没成功

 //保护工作表
                     worksheet.protect('111',{
                        objects: true,
                        scenarios: false,
                        selectLockedCells: true,
                        selectUnlockedCells: true,
                        formatCells: true,
                        formatColumns: true,
                        formatRows: true,
                        insertColumns: false,
                        insertRows: false,
                        insertHyperlinks: false,
                        deleteColumns: false,
                        deleteRows: false,
                        sort: false,
                        autoFilter: false,
                        pivotTables: false,
                    }
                    );

//导出

 saveWorkbook(workbook, fileName) {
                    // 导出文件
                    workbook.xlsx.writeBuffer().then((data => {
                        const blob = new Blob([data], { type: '' });
                        saveAs(blob, fileName);
                    }))
                     //workbook.xlsx.writeBuffer().then(res => {
                     //    var blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' });
                     //    saveAs(blob, 'vvull.xlsx');
                     //})
                  
                     
                }

成功导出EXCEL,工作表也受保护了,但是密码没进去,直接就能撤销保护,这是为啥?

  • 写回答

5条回答 默认 最新

  • 技术宅program 2023-05-21 00:10
    关注

    以下答案由GPT-4.0Plus大模型与博主A努力中.......共同编写:

    这很可能是ExcelJS在设置工作表保护密码时有 bug 的问题。我查看ExcelJS的issue,确实发现有用户报告过设置工作表保护密码不生效的问题。
    导致这个问题的原因可能有两种:

    1. ExcelJS版本问题
      不同版本的ExcelJS在这个功能上存在问题的可能性不同。您当前使用的是4.3.0版本,但在更高或更低版本中,这个问题可能已经修复。我建议您可以尝试升级到最新版本的ExcelJS,看是否可以修复此问题。
    2. writeBuffer方法问题
      ExcelJS提供的workbook.xlsx.writeBuffer()方法用于将Workbook对象输出为数据流,以使其可以下载或上传。但是,这个方法可能会导致某些高级功能(如工作表保护)的设置不生效。
      要解决这个问题,可以不使用writeBuffer方法,而是使用writeFile方法直接写入磁盘文件:
    js
    workbook.xlsx.writeFile(fileName)
      .then(function(){
        // 文件写入成功
      }); 
    
    

    写入磁盘文件后,再读取该文件进行下载或上传操作。这种方法可以保证工作表保护密码等高级设置生效。

    除上述两种可能外,密码设置不生效的问题也有可能是由于密码字符串'111'的问题所致。但根据您的描述,更有可能是ExcelJS自身的问题。

    所以,我的建议是:

    1. 升级到最新版本的ExcelJS,确认此问题是否已经修复
    2. 不使用writeBuffer方法,而使用writeFile方法将Workbook写入磁盘文件
    3. 尝试更复杂的密码字符串,确认密码设置过程没有问题
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月24日
  • 赞助了问题酬金15元 5月23日
  • 赞助了问题酬金15元 5月19日
  • 创建了问题 5月19日