Heim >Web-Frontend >js-Tutorial >Wie kann ich Google Apps-Skript optimieren, um übermäßige Verarbeitungszeit zu reduzieren, die durch häufige Aufrufe von Range.getValue() und Range.setValue() verursacht wird?

Wie kann ich Google Apps-Skript optimieren, um übermäßige Verarbeitungszeit zu reduzieren, die durch häufige Aufrufe von Range.getValue() und Range.setValue() verursacht wird?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-30 14:58:11485Durchsuche

How Can I Optimize Google Apps Script to Reduce Excessive Processing Time Caused by Frequent Range.getValue() and Range.setValue() Calls?

Lange Verarbeitungszeit wahrscheinlich aufgrund übermäßiger Range.getValue()- und Range.setValue()-Aufrufe

Problembeschreibung

Das Skript scannt eine Spalte von Kundenbestellinformationen, Identifizierung von Staatscodes und Kombination von Vor- und Nachnamen. Bei Bedarf werden auch leere Zeilen eingefügt. Allerdings wird die Verarbeitungszeit bei großen Spalten aufgrund häufiger Aufrufe von Range.getValue() und Range.setValue() zu lang.

Optimierungen

Um die Verarbeitungszeit zu verkürzen, wird empfohlen, Aufrufe zu minimieren zu den Diensten von Google, einschließlich Range.getValue() und Range.setValue(). Folgende Optimierungen können umgesetzt werden:

  • Serviceanrufe minimieren: Vermeiden Sie redundante Anrufe an die Server von Google. Anstatt beispielsweise Range.getValue() und Range.setValue() in einer Schleife zu verwenden, lesen Sie alle erforderlichen Daten einmal in ein Array und schreiben Sie sie in einem Stapel zurück in die Tabelle.
  • Sehen Sie -Ahead Caching: Google Apps Script speichert Werte zwischen, um wiederholte Aufrufe zu reduzieren. Optimieren Sie Skripte, indem Sie abwechselnde Lese- und Schreibbefehle minimieren und so eine effektive Nutzung des Caches ermöglichen.
  • Verwenden Sie Arrays: Rufen Sie Daten in ein Array (ein zweidimensionales JavaScript-Array) ab und führen Sie Operationen daran aus die Daten innerhalb des Arrays. Dies reduziert die Anzahl der Lese- und Schreibaufrufe an die Tabelle.
  • Vermeiden Sie abwechselndes Lesen/Schreiben: Vermeiden Sie abwechselnde Lese- und Schreibbefehle, da dies den Look-Ahead-Caching-Mechanismus umgehen kann. Stapeln Sie ähnliche Vorgänge (z. B. Lesen oder Schreiben) zusammen.

Code-Verbesserungen

Unten finden Sie ein optimiertes Skript, das das Problem der übermäßigen Verarbeitungszeit behebt:

function format() {
  const SS = SpreadsheetApp.getActiveSpreadsheet();
  const SHEET = SS.getActiveSheet();
  const LAST_ROW = SHEET.getRange('A:A').getLastRow();
  let row, range1, cellValue, offset1, offset2, offset3;

  // Loop through all cells in column A
  for (row = 0; row < LAST_ROW; row++) {
    range1 = SHEET.getRange(row + 1, 1);

    // If cell substring is a number, skip it as substring cannot process numbers
    cellValue = range1.getValue();
    if (typeof cellValue === 'number') continue;

    // Check for the state code prefix "-"
    const DASH = cellValue.substring(0, 1);

    // Get neighboring cells
    offset1 = range1.offset(1, 0).getValue();
    offset2 = range1.offset(2, 0).getValue();
    offset3 = range1.offset(3, 0).getValue();

    // Handle state code "-"
    if (DASH === '-') {
      // Merge cells 1 and 2 and write "Order complete" in cell 2
      range1.offset(1, 0).setValue(offset1 + ' ' + offset2);
      range1.offset(2, 0).setValue('Order complete');
    }

    // Insert cell if offset 3 is not blank
    if (DASH === '-' && offset3 !== '') {
      // Select cells from 3 rows down
      SHEET.getRange(row + 1, 1, LAST_ROW)
        .offset(3, 0)
        .moveTo(range1.offset(4, 0));
    }
  }
}

Durch die Befolgung dieser Optimierungen wird das Skript die Verarbeitungszeit erheblich verkürzen, indem teure Aufrufe von Range.getValue() und minimiert werden Range.setValue().

Das obige ist der detaillierte Inhalt vonWie kann ich Google Apps-Skript optimieren, um übermäßige Verarbeitungszeit zu reduzieren, die durch häufige Aufrufe von Range.getValue() und Range.setValue() verursacht wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn