2017-11-27 3 views
2

Ich versuche, eine große Anzahl von Zeilen zur Tabelle hinzuzufügen. Mein Projekt hat die Anforderung für die Addition großer Tabellen.So maximieren Sie die Leistung für die Tabellenzeilenhinzufügung von 50K + -Zeilen mit Excel JavaScript API-Office-Add-In

Bitte lassen Sie mich wissen, ob es eine bessere Alternative zur Maximierung der Leistung gibt. Sollte ich Range-Objekt-API verwenden?

Der Code ist wie folgt.

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)); 
     } 
    }); 

} 
+0

Überprüfungsfragen sollten auf [codereview.stackexchange.com] (https://codereview.stackexchange.com) veröffentlicht werden. – evolutionxbox

+0

Verwenden Sie die Paginierungstechnik, basierend auf dem Indexklick, übertragen Sie Daten auf DOM –

Antwort

1

Es ist effizienter, Ihre Zeilen in einem möglichst großen Block (Array von Arrays) anstatt in einer einzelnen Zeile hinzuzufügen.
Auch wenn Sie Formeln in Ihrer Arbeitsmappe haben, müssen Sie sich im manuellen Berechnungsmodus befinden (aus irgendeinem Grund können Sie den Berechnungsmodus nicht aus der Office-JS API setzen)
oder versuchen Sie, die nächste Entsprechung zu verwenden: suspendCalculationUntilNextSync()

sehen Sie mein Blog-Post auf EXcel JS Read-Write Performance für weitere Informationen: Excel JS Read-Write Performance

0

Als Charles erwähnt, wird die darunter liegende Bereich des Tischkörpers Aktualisierung zu einer besseren Leistung führen. Dies bedeutet, dass die Tabelle automatisch maximiert werden sollte. Dies ist die Standardeinstellung. Es gibt eine laufende Untersuchung und technische Arbeit bezüglich der Tabellenaktualisierungsleistung. Sie können auf Updates here überwachen.

Verwandte Themen