Office Script: Best Practice für Daten kopieren mit getUsedRange()

In diesem Beitrag zeige ich eine Best-Practice-Methode in Office Script: Wie man Daten mit getUsedRange().getValues() ausliest und anschließend korrekt in ein anderes Tabellenblatt einfügt, inklusive Dimensionierung über getRangeByIndexes().

EXCELOFFICE SCRIPT

9/24/20251 min read

Office Script: Best Practice für Daten kopieren mit getUsedRange()

Im letzten Beitrag habe ich erklärt, wie man mit getUsedRange().getValues() Daten aus einem Tabellenblatt holt. Heute geht es darum, diese Daten korrekt in ein anderes Blatt einzufügen.

Mein Aha-Moment

Ein häufiger Fehler: Man speichert die Werte in einer Variable ab und versucht, sie einfach in ein anderes Blatt zu schreiben. Das funktioniert aber nicht ohne weiteres, denn Office Script braucht eine Ziel-Range mit exakter Größe.
Die gute Nachricht: Mit .length kann ich die Zeilen- und Spaltenanzahl automatisch ermitteln und so das Ziel perfekt dimensionieren.

Best-Practice-Beispiel

So sieht ein sauberer Ablauf aus:

let tabelle1 = workbook.getWorksheet("Tabelle1")
let tabelle2 = workbook.getWorksheet("Tabelle2")

// speichert den Inhalt aus Tabelle1 ab
let inhalt = tabelle1.getUsedRange().getValues()

// liest Zeilenanzahl und Spaltenanzahl für spätere Dimensionierung beim Einfügen
let zeilenanzahl = inhalt.length
let spaltenanzahl = inhalt[0].length

// überträgt den Inhalt auf Tabelle2
tabelle2.getRangeByIndexes(0,0,zeilenanzahl,spaltenanzahl).setValues(inhalt)

Erklärung

  • getValues() gibt die Inhalte als 2D-Array zurück.

  • inhalt.length liefert die Anzahl der Zeilen.

  • inhalt[0].length liefert die Anzahl der Spalten (über die erste Zeile geprüft).

  • Mit getRangeByIndexes(0,0,zeilenanzahl,spaltenanzahl) definiere ich die Ziel-Range exakt.

  • Erst dann kann setValues(inhalt) den Inhalt einfügen.

Mein Fazit

Das Zusammenspiel von getUsedRange(), .length und getRangeByIndexes() ist der sichere Weg, um Daten zwischen Tabellenblättern zu kopieren. So bleibt der Code robust, auch wenn sich die Größe des Datenbereichs später ändert.

Weitere interessante Beiträge:

Wie bekommt man den gesamten genutzten Bereich, ohne zu wissen wo dieser anfängt oder aufhört?

Wie man einen Bereich in seiner Größe definiert, um z.B. kopierte Daten einzufügen.

Office Script .length nutzen für dynamischen Rangebereichsberechnung
Office Script .length nutzen für dynamischen Rangebereichsberechnung