2016-09-30 1 views
0

Ich habe zwei Blätter; Der erste ist der Check-in mit 6 Spalten und der zweite ist der Check-out mit 8 Spalten.eine ausgewählte Zeile mit identischen Spalten in zwei verschiedenen Blättern finden und aus einem löschen

meine Spalten sind wie folgt aus:

in Check-in-Blatt:

Code | Modell | gemacht | Typ | Standort | Check-in Zeit

in Check-out Blatt:

Check-out (y/n) | Code | Modell | gemacht | Typ | Standort | Check-in-Zeit | Auscheckzeit

Wie Sie sehen, kommen Check-In-Spalten und Daten durch eine Filterfunktion zum Auschecken. Wenn ich also ein "Modell" auschecken möchte, tippe ich einfach den Modellnamen in eine bestimmte Zelle ein und es werden die zugehörigen Daten vom Check-In-Blatt mitkopiert. Ich machte auch eine Funktion für die erste Spalte des Auscheckbogens, die, wenn ich einmal "y" unter der Spalte "Check-out? (Y/n)" in einer der gefilterten Zeilen eingab, würde sie jetzt() eintippen die letzte Spalte.

Meine Frage ist, dass ich auch die Zeile mit "y" in der ersten Spalte von "Check-out" finden und finden Sie diese Zeile in Check-in-Blatt basierend auf "Check-in-Zeit" (die ist die eindeutigste Daten für jede Zeile) und löschen Sie es aus der Liste, die meine Inventarliste ist. Ich bin mir nicht sicher, wie es geht. Ich habe nach einem Google-Skript-Code gesucht, aber kein Glück. Jeder Rat wird geschätzt.

+0

Ist dies für Google Spreadsheets jetzt oder für Excel, in dem Post erwähnen Sie nur Google Spreadsheet, aber Sie haben zwei Excel-bezogene Tags. –

+0

@RobinGertenbach, dies ist für Google Spreadsheets; Ich habe gerade Excel-ähnliche Dinge getaggt, für den Fall, dass es einen ähnlichen Prozess geben würde, und wenn jemand das weiß. – Alex

Antwort

1

Hier würden Sie wahrscheinlich brauchen eine onEdit() Funktion, die prüfen würde, wenn ‚y‘ in der ersten Spalte eingetragen ist:

function onEdit(e) { 
    var ss = e.source; 
    if (e.range.getColumn() === 1 && e.value === "y") { 
     ...some code here.... 
    } 
} 

Dann erhalten Sie die Werte aus der Zeile, in der ‚y‘ eingegeben wurde:

getValues() gibt immer ein zweidimensionales Array zurück, deshalb müssen Sie angeben, dass Sie das erste Element haben möchten, obwohl es nur eines gibt.

Auf die gleiche Weise Sie alle Werte aus dem Check-in-Bogen sind unter:

var checkInArray = checkInSheet.getRange(2, 1, checkInSheet.getLastRow() - 1, checkInSheet.getLastColumn()).getValues(); 

Dann kommt das Überprüfungsteil. Ich dachte, es könnte sicherer sein, all die Werte Arrays zu vergleichen, anstatt nur Daten:

for (var i = 0; i < checkInArray.length; i++) { 
     if (arraysEqual(checkInArray[i], checkOutArray) == true) { 
     checkInSheet.deleteRow(i + 2); //i + 2 is the row in which same values have been found 
     return true; 
     } 
     else continue; 
    } 

Wo arraysEqual ist:

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) { 
    return false; 
    } 
    for(var i = arr1.length; i--;) { 
    if(arr1[i].toString() !== arr2[i].toString()) { 
     return false; 
    } 
    } 

    return true; 
} 

Insgesamt sieht es wie folgt aus:

function onEdit(e) { 
    var ss = e.source; 
    var checkOutSheet = ss.getSheets()[0]; 
    var checkInSheet = ss.getSheets()[1]; 
    if (e.range.getColumn() === 1 && e.value === "y") { 
    var checkOutArray = checkOutSheet.getRange(e.range.getRow(), 2, 1, 6).getValues()[0]; //getting the values from the row where "y" was entered (e.range.getRow()) 
    var checkInArray = checkInSheet.getRange(2, 1, checkInSheet.getLastRow() - 1, checkInSheet.getLastColumn()).getValues(); //getting all the values from check out sheet 
    for (var i = 0; i < checkInArray.length; i++) { 
     if (arraysEqual(checkInArray[i], checkOutArray) == true) { 
     checkInSheet.deleteRow(i + 2); //i + 2 is the row in which same values have been found 
     return true; 
     } 
     else continue; 
    } 
    } 

} 

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) { 
    return false; 
    } 
    for(var i = arr1.length; i--;) { 
    if(arr1[i].toString() !== arr2[i].toString()) { 
     return false; 
    } 
    } 

    return true; 
} 
Verwandte Themen