2

我正在尝试向表中添加大量行。我的项目需要添加大表。

请让我知道是否有更好的选择来最大化性能。我应该使用 Range 对象 API 吗?

代码如下所示。

   function createSampleSheet(numberOfTimes) {

    startTime = performance.now();

    Excel.run(function (context) {
        var sheets = context.workbook.worksheets;
        var sheet = context.workbook.worksheets.getActiveWorksheet();
        var expensesTable = sheet.tables.add("A1:H1", true /*hasHeaders*/);
        expensesTable.name = "ExpensesTable";


     expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Category Type", "Class", "NHID", "Collab ID", "WBID"]];

      expensesTable.rows.add(null /*add rows to the end of the table*/, [
["1/1/2017", "The Phone Company", "Communications", "BCD","Distinction", "3", "45", "1000036"]

            ]);


            for (i = 1; i <= numberOfTimes; i++) {

expensesTable.rows.add(null /*add rows to the end of the table*/, [
               ["1/2/2017", "The Mobile Company", "Corporations", "BSD", "First", "2", "36", "1000026"] ]);}

      return context.sync()
            .then(function () {
                endTime = performance.now();

 log.logOutput(" " + numberOfTimes + " rows++ " + (endTime - startTime) + " milliseconds OR " + ((endTime - startTime) / 1000) + " seconds")

            })
            .then(context.sync);

    }).catch(function (error) {
        console.log("Error: " + error);
        BWUI.errorHandler("Upload tables failed : " + error);
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
    });

} 
4

2 回答 2

1

将行添加到尽可能大的块(数组数组)中而不是一次添加一行会更有效。
此外,如果您的工作簿中有任何公式,您需要处于手动计算模式(不幸的是,由于某种原因,您无法从 Office-JS API 设置计算模式)
或尝试使用最接近的等价物,即 suspendCalculationUntilNextSync()

有关详细信息,请参阅我关于 EXcel JS 读写性能的博客文章: Excel JS 读写性能

于 2017-11-27T11:30:53.593 回答
0

正如查尔斯所提到的,更新表体的基础范围将带来更好的性能。这确实意味着应该启用表格以自动扩展,这是默认设置。关于表更新性能的调查和工程工作正在进行中。您可以在此处监视更新。

于 2017-11-27T16:41:23.993 回答