在线添加行在表格中非常慢

我有一个JavaScript导入加载项,我使用TableBinding.addRowsAsync函数将行添加到20列的表中。 在桌面客户端中,当添加大量的行时,这种方式非常有效,但是在Excel中,它的性能很糟糕。 对于100行,添加的平均时间是1500ms。 对于300,它会上升到2100毫秒左右。 以下是性能testing的实际代码:

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

我有一个要求,以支持导入大量的行(平均20000)。 目前,这个导入被添加到100页,以防止插件5秒后无响应,但这需要很长时间才能完成。

有什么我缺less,我可以用来改善浏览器的性能?

我正在跟进为什么添加行到表绑定使用该API是慢的。 请继续关注(虽然也意识到任何错误修复都不会是瞬间的)

有一件事你可以尝试 – 我不确定是否会更快 – 是使用我们在这里列出的特定于主机的Excel API: https : //github.com/OfficeDev/office-js-docs/树/主/ 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,MSFT公司Office Extensibility团队的开发人员