Für eine Sache, geben Sie nie die Blatt Sie arbeiten mit. Auf welches Blatt der Tabelle sollte dieses Skript angewendet werden? Verwenden Sie getActiveSheet
, um den aktiven auszuwählen, oder getSheetByName
, um ein bestimmtes Blatt auszuwählen.
Auch Ihre Funktion getNextRow
gibt eine Ganzzahl zurück, die die Nummer der ersten Zeile ist, die unter allen Daten liegt. So weit, ist es gut. Aber dann rufst du ss.getRange(nextrow)
an wo nextrow ist diese ganze Zahl ... nicht gut. Dies ist keiner der acceptable ways der Verwendung dieser Methode: Es benötigt entweder A1-Notation oder (Zeile, Spalte) Paar Ganzzahlen für eine einzelne Zelle, oder (Zeile, Spalte, Anzahl der Zeilen, Anzahl der Spalten) vierfach für a Bereich von mehr als einer Zelle. Das ist, was Sie haben, so
ss.getRange(nextrow, 1, data.length, data[0].length).setValues(data);
verwenden Dies sagt: nextrow
in der Reihe beginnend, Spalte 1 (dh A), den Bereich der gleichen Größe wie data
wählen. Mit dem Paar data.length, data[0].length
erhält man die Höhe und Breite von data
Array.
Das heißt, es gibt einen einfacheren Weg zu erreichen, was Sie wollen, mit appendRow
Methode. Hier ist eine Funktion, die alle Ihre Code ersetzen würde:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange('a4:e4')
var data = range.getValues();
sheet.appendRow(data[0]);
}
Dies hängt den Inhalt der A4: E4 in dem aktiven Blatt auf dem Boden des gleichen Blatt. Die Methode appendRow
nimmt ein eindimensionales Array, also data[0]
und nicht nur data
(das ist zweidimensional).