Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Excel online中向表中添加行的速度非常慢_Javascript_Excel_Office365_Office Js - Fatal编程技术网

Javascript 在Excel online中向表中添加行的速度非常慢

Javascript 在Excel online中向表中添加行的速度非常慢,javascript,excel,office365,office-js,Javascript,Excel,Office365,Office Js,我有一个JavaScript导入外接程序,其中我使用函数将行添加到一个包含20列的表中。在桌面客户端中,当添加大量行时,这种方法非常有效,但在Excel online中,性能非常糟糕。对于100行,平均添加时间为1500ms。对于300,它会上升到2100毫秒左右。以下是性能测试的实际代码: //vm.binding is a tableBinding //vm.testData is an array of twenty string values vm.binding.addRowsAsyn

我有一个JavaScript导入外接程序,其中我使用函数将行添加到一个包含20列的表中。在桌面客户端中,当添加大量行时,这种方法非常有效,但在Excel online中,性能非常糟糕。对于100行,平均添加时间为1500ms。对于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秒后变得无响应,但这需要很长时间才能完成


我是否缺少可以用来提高浏览器内性能的内容

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

您可以尝试的一件事——我不确定它是否会更快——是使用以下列出的特定于主机的Excel API:

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

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扩展团队的开发人员,我正在跟进为什么使用该API向表绑定添加行速度慢。请继续关注(尽管也要意识到任何错误修复都不会是即时的…)

您可以尝试的一件事——我不确定它是否会更快——是使用以下列出的特定于主机的Excel API:

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

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扩展团队的开发人员,请显示您正在使用的实际代码。请显示您正在使用的实际代码。我尝试使用新API,但没有看到任何性能改进,两者之间几乎相等。我尝试使用新API,但没有看到任何性能改进,这两者之间几乎相等。