当前位置: 首页 > 知识库问答 >
问题:

javascript - excelJs库导出excel卡顿?

凌博实
2024-06-28

背景:

需求: 导出的excel表指定列可编辑,其它列不可编辑。

相关实现代码如下:

// 保护整个工作表
    sheet1.protect('yourpassword', {
      selectLockedCells: true,
      selectUnlockedCells: true,
    });
    //解锁可编辑列
    const unlockColumns = [6,7,8,9,12]
    unlockColumns.forEach((columnIndex) => {
    sheet1.getColumn(columnIndex).eachCell((cell,rowNumer) =>  {
      if( rowNumer !== 1 ) {// 跳过标题行
        cell.protection = { locked: false }
      }
     }) 
    })

结果: 功能可以满足,但是加上这段代码之后,导出excel表的速度明显变慢,有明显的卡顿现象。请问下有什么方法可以提升导出excel表的速度吗?

共有1个答案

杭昊空
2024-06-28
  1. 批量操作
    尽量减少逐个单元格操作,尝试批量处理单元格。
  2. 使用模板
    预先创建一个模板文件,里面已经设置好保护和解锁的列,然后将数据写入模板文件中。
  3. 优化代码结构
    改进你的代码结构,使其更高效地处理大数据量。

    const ExcelJS = require('exceljs');
    
    async function exportExcel(data) {
      const workbook = new ExcelJS.Workbook();
      const sheet = workbook.addWorksheet('Sheet1');
    
      // 添加数据
      data.forEach((row, index) => {
     sheet.addRow(row);
      });
    
      // 保护整个工作表
      sheet.protect('yourpassword', {
     selectLockedCells: true,
     selectUnlockedCells: true,
      });
    
      // 解锁指定列
      const unlockColumns = [6, 7, 8, 9, 12];
    
      // 批量解锁单元格
      unlockColumns.forEach((columnIndex) => {
     sheet.getColumn(columnIndex).eachCell((cell, rowNumber) => {
       if (rowNumber !== 1) { // 跳过标题行
         cell.protection = { locked: false };
       }
     });
      });
    
      // 导出 Excel 文件
      await workbook.xlsx.writeFile('output.xlsx');
    }
    
    // 示例数据
    const data = [
      ['列1', '列2', '列3', '列4', '列5', '列6', '列7', '列8', '列9', '列10', '列11', '列12'],
      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
      // 更多数据...
    ];
    
    // 调用导出函数
    exportExcel(data);
    
 类似资料:
  • 问题内容: 我已经找到了将HTML表导出到Excel的方法,但是在将JavaScript表导出从网站导出到excel时遇到了问题。请帮助我找到一种方法,将此表导出到Excel。 页面,从那里我需要信息: www.jalgpall.ee/players.php?year=2012&team=84&player=28469&b=ML 此页面javascript表函数的示例: 问题答案: 我自己找到了答

  • ExcelJS 是一个 Node.js 模块,可用来读写和操作 XLSX 和 JSON 电子表格数据和样式。 示例代码: // Add column headers and define column keys and widths// Note: these column structures are a workbook-building convenience only,// apart f

  • 实际上,我已经使用Node.js和mongoDB完成了一个示例项目,它允许用户保存注释,现在我正在进行导出和导入 点击导出按钮,会下载一个带有用户名和备注字段的excel文件,用户必须在下载的excel文件中写入用户名和备注,现在点击导入按钮,会显示一个对话框,它会显示一个选择文件的按钮。这里我们需要选择和上传excel 上传成功后,数据将存储在mongoDB数据库中。 我已经使用javascri

  • 从你的本地钱包中导出一张卡片并打包,以便它可以随处传送或使用。. composer card export --file dan.card --name dan@penguin-network 句法 Options: --help Show help [boolean] -v, --version Show version number [boolean] --

  • 本文向大家介绍javascript导出csv文件(excel)的方法示例,包括了javascript导出csv文件(excel)的方法示例的使用技巧和注意事项,需要的朋友参考一下 这里贴出JavaScript导出csv文件(excel)的代码。 上面的写法,如果excel中的数据太多,就会导致无法导出的结果,原因是浏览器对URL的长度有限制,因此要使用Blob对象和window.URL.creat

  • 背景: 在项目开发中,经常需要下载模板/导出表单数据(excel)格式的需求,虽然xlsx库可以满足基本需求,但是有些excel表的样式很难定制化,所以想着自己封装一个 尝试: 封装思路: excel和table关联起来,而连接两者的桥梁为new Blob()构造函数,示例代码如下: 结果: 可以正常生成excel文件 缺点: 但是又有点不太像excel的格式,比如我想在excel表里面新增行或者

  • 有没有办法从HTML表导出到excel。我在.NET核心应用程序中使用了HTML表格,需要用样式对表格进行格式化,并且需要导出到Excel。

  • 问题内容: 我的表格格式 我在网上找到了以下代码。但是,如果我使用“ thead”和“ tbody”标签,那是行不通的 问题答案: 您在Internet上找到的解决方案无法正常工作的原因是因为线路开始。该变量只有两个元素,是和。该行正在寻找内的所有元素是。你能做的最好的事情就是给一个id你和然后抓住所有基于该值。说您有: 然后对标记执行相同的操作 编辑:我也强烈建议使用jQuery。它将缩短为: