2016-12-20 8 views
0

Ich versuche, eine Zeile mit einem bestimmten Bereich in die Zeile kopieren, nachdem Text endet. Ich hatte es vor ein paar Tagen in Betrieb, kann aber nicht herausfinden, wo ich gerade falsch liege.Google Scripts copyto Ausgabe

Bisher habe ich:

function getNextRow(); 
    return SpreadsheetApp.getActiveSpreadsheet().getLastRow()+1; 
    } 

    function test() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var range = ss.getRange('a4:e4') 
    var data = range.getValues(); 
    var nextrow = getNextRow(); 
    ss.getRange(nextrow).setValues(data); 
    } 

Ich habe die CopyTo versucht, aber kann nicht scheinen, wieder, um herauszufinden, von der Seite des Google-Entwickler. Jede Hilfe wird geschätzt, danke!

Antwort

0

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).