2017-04-04 15 views
0

Ich habe eine Google-Tabelle, die ich ein letztes Problem habe ich nicht scheinen zu lösen.Google Blätter-Schleife Suchspalte, wählen Sie tow

Ich habe eine Schaltfläche zu diesem Skript hinzugefügt, und wenn ich die Taste drücke, wird die AddClient-Funktion ausgelöst.

Wie kann ich das Skript unten Schleife alle Zeilen in Spalte 3 nach dem Ja-Wert suchen, wenn es gefunden wird, kopieren Sie die Zeile darunter auf Blatt "Client" und dann aufhören?

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

    if(s.getName() == "SETUP" && r.getColumn() == 3 && r.getValue() == "yes")  { 
    var row = r.getRow() + 1; // Add 1 to the active row 
    var targetSheet = ss.getSheetByName("client"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 2, 1, 4).copyTo(target, {contentsOnly:true}); //Only selecting column 2, then the following 4 columns 
    } 
} 

bearbeiten * Beispiel Dokument: https://docs.google.com/spreadsheets/d/1DFbAp0IN8_UFv9u8kWiZBTxDogj4e7FnuAPzC0grDw0/edit?usp=sharing

Jede Hilfe sehr zu schätzen!

Cheers, Reiel

+0

Was ist die Interaktion, die Sie versuchen zu entwerfen? jemand gibt ja in die dritte Spalte ein und die Zeile wird in ein anderes Blatt kopiert? –

+0

Sorry, jetzt bin ich noch weniger im Klaren, hast du einen Button und das Skript soll alles mit einem Ja kopieren oder gibt es immer ein Ja überall und du hast einen Button für jede Zeile? –

+0

Vielleicht würde ein Screenshot oder besser eine Beispieltabelle helfen –

Antwort

0
  • Da Sie haben eine statische Form die Position des informatin kopiert werden Da wir nicht
  • ändern wissen wir über die Daten kopieren wollen wir nicht brauchen Sie jede Validierung, wo wir sind, können so all das Zeug gehen
  • Blätter haben eine appendRow Methode, die Pflege der beteiligten Buchhaltung nehmen mit der letzten Reihe zu finden

Dies ermöglicht es uns, das Skript die vereinfachen folgende:

function AddClient() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0]; 
    ss.getSheetByName("client").appendRow(data); 
} 

Edit: Duplikate entfernen Sie Folgendes tun können:

function AddClient() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0]; 
    var clients = ss.getSheetByName("client").getDataRange().getValues(); 

    if (!clients.filter(function(row) {return data.join("|") === row.join("|");})) { 
    ss.getSheetByName("client").appendRow(data); 
    } 
} 

Beachten Sie, dass für das jeweilige Beispiel gibt es einige Probleme, weil die führende Null wird abgeschnitten. Sheets ist ein bisschen komisch und versucht manchmal, das Format zu einer Zahl zu zwingen, selbst wenn Sie die Formate der Zellen auf Text setzen ...

+0

sehr schöne Lösung, da ich die Richtung mit dem Knopf auf halbem Weg änderte, hatte ich eine Idee, dass es viel optimiert werden konnte .. Vielen Dank! Ist es möglich, nach doppelten Eingaben zu suchen und das Format für die Ausgabe zu bearbeiten? – user2765075

+0

Bitte überprüfen Sie meine aktualisierte Antwort –

+0

Danke, dass Sie sich die Zeit genommen haben, damit zu helfen! Das Skript, das Duplikate erkennen soll, funktioniert nicht. Es fügt sogar Daten hinzu, die neu sind. Auch wenn ich die: '.copyTo (Ziel, {contentsOnly: true})' die contentsOnly löste die Formatierung für mich .. Ist das eine bessere Lösung zu erreichen, was ich brauche? Da dies ein Gebot für Kunden ist, ist die Formatierung sehr wichtig. vielleicht am meisten für die 0 in den Postleitzahlen. – user2765075

Verwandte Themen