【问题标题】:Adding rows to table very slow in Excel online在 Excel 在线中向表中添加行非常慢
【发布时间】:2016-09-14 14:08:24
【问题描述】:

我有一个 JavaScript 导入插件,我在其中使用 TableBinding.addRowsAsync 函数将行添加到 20 列的表中。在桌面客户端中,这在添加大量行时效果很好,但在 Excel 在线中,性能很糟糕。对于 100 行,平均添加时间为 1500 毫秒。对于 300,它上升到大约 2100 毫秒。以下是性能测试的实际代码:

//vm.binding is a tableBinding
//vm.testData is an array of twenty string values
vm.binding.addRowsAsync(vm.testData, function (result) {
   //...
    });

我需要支持导入大量行(平均 20000 行)。目前,此导入以 100 页的形式添加,以防止加载项在 5 秒后无响应,但这需要很长时间才能完成。

我有什么遗漏的东西可以用来提高浏览器的性能吗?

【问题讨论】:

  • 请显示您正在使用的实际代码。

标签: javascript excel office365 office-js


【解决方案1】:

我正在跟进为什么使用该 API 将行添加到表绑定很慢。请继续关注(尽管也意识到任何错误修复都不会是即时的......)

您可以尝试的一件事(我不确定它是否会更快)是使用此处概述的主机特定 Excel API:https://github.com/OfficeDev/office-js-docs/tree/master/excel

在您的情况下,代码将类似于:

Excel.run(function (ctx) { 
      var expenseTable = ctx.workbook.tables.getItem("ExpenseTable");
      expenseTable.rows.add(null,[['Rent','$600','Housing']]);
      expenseTable.rows.add(null, [["Movie Club", "$75", "Entertainment"]]);
      expenseTable.rows.add(null, [["Food", "$450", "Food"]]);
      expenseTable.rows.add(null, [["Car", "$150", "Transportation"]]);
      expenseTable.rows.add(null, [["Tuition", "$800", "School costs"]]);
      expenseTable.rows.add(null, [["Books", "$150", "School costs"]]);
      expenseTable.rows.add(null, [["Gift", "$100", "Other"]]);
      expenseTable.rows.add(null, [["Loan", "$250", "Loans/Payments"]]);

    return ctx.sync();
})
.catch(function (error) {
        console.log(JSON.stringify(error));
});

API 仅适用于 Excel Online 或 Excel 2016(不是 2013)。但是,如果这对您来说是个问题,您仍然可以在桌面上使用当前方法,并在线使用新方法(假设它更快)。做吧

if (Office.context.requirements.isSetSupported("ExcelApi")) {
    Excel.run(...)
} else {
    bindings.addRowsAsync(...)
}

希望这会有所帮助!

~ Michael Zlatkovsky,Office 可扩展性团队的开发人员,MSFT

【讨论】:

  • 我尝试了新的 API 并没有看到任何性能提升,两者几乎相等。
猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 2018-08-17
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多