Office js Office JS Excel加载项崩溃

Office js Office JS Excel加载项崩溃,office-js,office-addins,excel-addins,Office Js,Office Addins,Excel Addins,我正在Angular CLI项目中使用“@microsoft/office js”:“^1.1.43”(“@Angular/common”:”~10.2.0”) 我使用的是直接的方式,即,dataTable.rows.add(rows)这只适用于多达10k的记录,但它很耗时,但不会崩溃。对于具有50k条记录的输出,addin只是突然出现了一条消息:“抱歉,我们必须重新启动,因为此加载项没有响应。” 基于这篇文章,我尝试了untrack()方法 使用这种技术,excel addin现在运行良好(不

我正在Angular CLI项目中使用“@microsoft/office js”:“^1.1.43”(“@Angular/common”:”~10.2.0”)

我使用的是直接的方式,即,
dataTable.rows.add(rows)这只适用于多达10k的记录,但它很耗时,但不会崩溃。对于具有50k条记录的输出,addin只是突然出现了一条消息:“抱歉,我们必须重新启动,因为此加载项没有响应。”

基于这篇文章,我尝试了untrack()方法

使用这种技术,excel addin现在运行良好(不会崩溃),最多可记录57k(约20列)。这是我从API获得的普通输出。没有涉及任何格式,也没有任何excel样式或公式相关的琐事

然而,很少有报告会达到15万美元。使用与上面相同的技术,我尝试执行97k行,不幸的是,addin崩溃时显示的消息与它没有响应的消息相同

我还看到了这个帖子:它利用了webworker。但是,在我的例子中,我无法在webworker中执行Excel.run()

我只是想知道是否有任何更新,或者我需要尝试一些不同的东西,这样addin就不会崩溃(如果需要时间也可以,但不应该崩溃)

以下是我目前使用的代码:

createTable3() {
    let rows; //filled from API service length ranges from 5k to 150k
    let cols;//filled from API service length ranges from 3 to 25


    Excel.run(async (context) => {
      const sheet = context.workbook.worksheets.add('MiReport');
     
      console.log('Creating table...');
      const sheet = context.workbook.worksheets.getActiveWorksheet();
      sheet.getRange().clear();
      const range = sheet.getRange("A1").getResizedRange(0, cols.length - 1);
      sheet.tables.add(range, false).set({ name: "myTable" });
        const table = sheet.tables.getItem("myTable");
                table.getHeaderRowRange().values = [columns];
                const rangeToWriteTo = table.getDataBodyRange().untrack()
                    .getCell(0, 0).untrack().getResizedRange(rows.length - 1, columns.length - 1).untrack();
                const fullTableRange = table.getRange().untrack().getCell(0, 0).untrack().getBoundingRect(rangeToWriteTo).untrack();
                table.convertToRange();
                rangeToWriteTo.values = rows;
                sheet.tables.add(fullTableRange, true /*hasHeaders*/);

                console.log('Created table...');

  }).catch( er => console.log('Exce.run() error', er));
  }

谢谢Deepak,这个问题是在Excel online、Windows还是Mac上发生的?我同意你的看法,它不应该崩溃。团队正在进行调查,同时,我想分享一些信息供你们将来参考。由于存在有效负载限制,因此我们无法为每个context.sync()发送大请求;因此,我们建议您可以将请求分为几个context.sync()。嗨,雷蒙德,是的,至少它不应该崩溃。我正在安装版本的MS excel 365 windows系统上尝试此功能,该系统具有i7 2.2GHz CPU和16 GB RAM。目前,根据OfficeJS的github讨论中的建议,我不使用表,而只是创建一个范围并将值直接写入表中。现在这并没有使外接程序崩溃,与创建并向表中添加大量行相比,性能也要好得多。更多详细信息:谢谢Deepak,这个问题是在Excel online、Windows还是Mac上发生的?我同意你的看法,它不应该崩溃。团队正在进行调查,同时,我想分享一些信息供你们将来参考。由于存在有效负载限制,因此我们无法为每个context.sync()发送大请求;因此,我们建议您可以将请求分为几个context.sync()。嗨,雷蒙德,是的,至少它不应该崩溃。我正在安装版本的MS excel 365 windows系统上尝试此功能,该系统具有i7 2.2GHz CPU和16 GB RAM。目前,根据OfficeJS的github讨论中的建议,我不使用表,而只是创建一个范围并将值直接写入表中。现在这并没有使外接程序崩溃,与创建并向表中添加大量行相比,性能也要好得多。更多详情: