2017-11-03 3 views
0

Dies ist mein erster Beitrag hier und mein erster Streifzug in die Skripterstellung in Google Tabellen. Jede Hilfe wird sehr geschätzt.Google Tabellen - Sie müssen eine Zeile von Tabelle1 nach Tabelle2 kopieren und die Zellenwerte in eine Zeile in Tabelle2 mit einem übereinstimmenden Spaltenwert einfügen

Wie im Titel angegeben, arbeite ich an einer Google-Tabelle, die zwei Blätter enthält, mit denen ich Daten aus einem übermittelten Google-Formular verarbeiten kann. In sheet1 werden die neuen Formularantworten eingegeben und sheet2 ist ein "Archiv" der Art, so dass sheet1 nur die letzten Einträge enthält, die ich noch nicht gelesen habe.

In Tabelle1 hat Spalte 8 eine 5-stellige Nummer, Spalte 9 ist entweder leer oder sagt "Rcvd", der Rest der Spalten enthält andere Daten, die nur kopiert werden müssen, aber keine eindeutigen Werte enthalten. Sheet1 und Sheet2 haben identische Spaltenüberschriften und Organisation, aber in Sheet2 ist nur Spalte 8 ausgefüllt.

Was ich möchte, ist, kopieren Sie alle Werte in einer bestimmten Zeile von Blatt1 nach Blatt2, wenn der Wert in Spalte 9 dieser Zeile wird in "Rcvd" geändert (am Edit). Die Werte der Zeile müssen dann in sheet2 in denselben Spalten in der Zeile mit dem übereinstimmenden Wert in Spalte 8 eingefügt werden. Die angegebene Zeile muss dann aus sheet1 gelöscht werden.

Bisher konnte ich die Zeile von Blatt1 nach Blatt2 bewegen und sich selbst in Blatt1 löschen, aber nicht in einer Zeile mit einem übereinstimmenden Spaltenwert in Blatt2 einfügen, nur in der letzten Zeile von Blatt2.

Ich habe dieses Skript wurde mit:

function onEdit(event) { 
// assumes source data in sheet named "sheet1" 
// target sheet of move to named "sheet2" 
// column with rcvd is col 9 or I 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 

if(s.getName() == "sheet1" && r.getColumn() == 9 && r.getValue() == "Rcvd") { 
var row = r.getRow(); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("sheet2"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row); 
} 
} 

Für mich sieht es wie der .getRange (targetSheet.getLastRow() + 1, 1) ist, was geändert werden muss die richtige Reihe bekommen Nummer in Blatt2 basierend auf dem Wert der Spalte 8, aber ich habe nicht viel Erfolg, es zur Arbeit zu bringen.

Dank! Diese

Antwort

0

war eine ziemliche doozy, aber ich habe die Funktionalität, die Sie wollen:

function onEdit(event) { 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 
var columnSearchNum = 3; 
var columnSearchChar = "C"; 
var rcvdColumn = 2; 
var sourceSheetName = "Sheet1"; 
var targetSheetName = "Sheet2"; 

if(s.getName() == sourceSheetName && r.getColumn() == rcvdColumn && r.getValue() == "Rcvd") { 
    var sourceRow = r.getRow(); 
    var targetSheet = ss.getSheetByName(targetSheetName); 
    var targetSheetNumRows = targetSheet.getLastRow(); 
    //console.log(targetSheetNumRows); 
    var sourceSheetNumColumns = s.getLastColumn(); 
    var targetRange = targetSheet.getActiveRange() 
    var targetValue = +s.getRange(columnSeachChar+sourceRow).getValue() 
    //console.log(targetValue); 
    var targetSheetRange = targetSheet.getRange(1,columnSearchNum,targetSheetNumRows,1); 
    //console.log(targetSheetRange.getNumRows() +" " +targetSheetRange.getNumColumns() + " " + targetSheetRange.getValues()); 
    var targetRow = findIndex(targetSheetRange.getValues(), targetValue); 
    //console.log(targetRow); 
    var target = targetSheet.getRange(targetRow, 1); 
    s.getRange(sourceRow, 1, 1, sourceSheetNumColumns).moveTo(target); 
    s.deleteRow(sourceRow); 
} 
} 

function findIndex(array, search){ 
    //console.log(array); 
    if(search == "") return false; 
    for (var i=0; i<array.length; i++){ 
    //console.log("comparing " + +array[i] + " to "+ +search); 
    if (+array[i] == +search){ 
     return i+1; 
    } 
    } 
    return -1; 
} 

Sie werden nur Blattnamen und Spalten ändern müssen, um Ihre Besonderheiten

+0

ES FUNKTIONIERT passen !!!!! DANKE ART SIR – 1ManRockBand

+0

Da ich es mit Google Forms-Daten verwende, konnte ich Formulardaten nicht mit dem moveTo-Befehl abschneiden. Ich habe 'moveTo (target)' in 'copyTo (target)' geändert und das Problem behoben. Danke noch einmal! – 1ManRockBand

Verwandte Themen