Ich kenne Google Sheet-Formeln ziemlich gut, aber nicht Skripting.Google Docs-Skript: Zelle in zwei andere Blätter onEdit, aber keine Duplikate verschieben
Ich lieh jemand enses Code von Stack-Überlauf, bastelte und fehlgeschlagen fehlgeschlagen.
Grundsätzlich, was ich versuche zu tun ist, wenn ich Text in eine Zelle in Spalte A in 1 Blatt eingeben, ich möchte, dass es den Text auf die nächste verfügbar, oder (+1 aus der letzten Zeile) in zwei andere Blätter, beide Spalte As. Ich brauche es auch, um nach Duplikaten zu suchen und den Text überhaupt nicht zu diesem Blatt hinzuzufügen, wenn der Text genau mit einer anderen Zelle übereinstimmt.
Hier ist der Code, mit dem ich getüftelt habe.
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "AddMember" && r.getColumn() == 27 && r.getValue() == "y") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("InputVPData");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
var targetSheet2 = ss.getSheetByName("InputSoulData");
var target = targetSheet2.getRange(targetSheet2.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.deleteRow(row);
}
}
Dieses Skript bewegt sich manchmal meine Zelle zu beiden Blättern, manchmal fügt sie es nur ein Blatt, manchmal ist es die Zelle zweimal auf das gleiche Blatt fügt hinzu und manchmal nur löscht es meine ursprüngliche Zelle und nicht tun alles damit.
Außerdem möchte ich nicht wirklich "y" in die AA-Spalte eingeben, um es zu verschieben, das größte Problem dabei ist, dass es auch die AA-Spalte auf die anderen Blätter ebenfalls verschiebt, die irgendwann wird ein großes Problem sein.
Dieses Skript prüft auch nicht auf Duplikate. Es gibt eine Google Sheet Data Validation-Funktion, die das kann, aber aus irgendeinem Grund ist es bisher, wenn es mit Scripting kombiniert wird, bestenfalls fleckig und funktioniert in 95% der Fälle nicht wirklich.
Hier ist eine Kopie meines Spreadsheet, es ist für jeden eingestellt mit Link kann bearbeiten. Ich denke nicht, dass es für dieses Skript benötigt wird, aber fühlen Sie sich frei zu sehen, mit was ich arbeite, und da es eine Kopie ist, stört es mich nicht, es zu brechen.
Aktualisiert Link- (1. März 2017)
Ich bin ein hundegroomer durch den Handel so das Scripting ist nicht meine Tasse Tee, und Google-Blatt Formeln sind nur ein Hobby zusammen mit Spiel Na sicher. :)
Edit: (1. März 2017)
Unten ist mein neues Skript. Ich habe mehrere neue Blätter hinzugefügt und das Skript funktioniert perfekt. Ich habe auch den obigen Tabellenlink aktualisiert, um eine neue Kopie mit vollen Bearbeitungsrechten wieder aufzunehmen.
Ich habe jedoch eine neue Frage. Wie gehe ich vor, dies rückgängig zu machen? Nehmen wir zum Beispiel an, ich sollte ein neues Blatt mit dem Namen "RemoveMember" hinzufügen?
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
/*var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();*/
// Nothing wrong with using event.source, It is easier to debug with the below code.
var s = ss.getActiveSheet()
var r = ss.getActiveRange()
// The reason your previous code was checking for column AA was due to the following code r.getColumn() == 27 and r.getValue() == 'y'
if(s.getName() == "AddMember" && r.getColumn() == 1) {
var targetSheet = ss.getSheetByName("InputVPData");
var tlastRow = targetSheet.getLastRow()
// targetMembers gets the previous members you have in the inputVpData
var targetMembers = targetSheet.getRange(8,1,tlastRow - 7,1).getValues()
//RemoveDuplicates removes if any duplicates are found.
var newMembers = removeDuplicates(r.getValues(),targetMembers)
//check and see if you have any new entry before entering the data
//important because getRange cannot have 0 as argument.
if(newMembers.length != 0){
targetSheet.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
var targetSheet2 = ss.getSheetByName("InputSoulData");
tlastRow = targetSheet2.getLastRow()
targetSheet2.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
var targetSheet3 = ss.getSheetByName("InputDonatedData");
tlastRow = targetSheet3.getLastRow()
targetSheet3.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
var targetSheet4 = ss.getSheetByName("InputWonData");
tlastRow = targetSheet4.getLastRow()
targetSheet4.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
var targetSheet5 = ss.getSheetByName("InputCapturedData");
tlastRow = targetSheet5.getLastRow()
targetSheet5.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
var targetSheet6 = ss.getSheetByName("InputDefendedData");
tlastRow = targetSheet6.getLastRow()
targetSheet6.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
var targetSheet7 = ss.getSheetByName("InputLostData");
tlastRow = targetSheet7.getLastRow()
targetSheet7.getRange(tlastRow + 1, 1,newMembers.length, 1).setValues(newMembers);
}
r.clear()
}
}
function removeDuplicates(newMembers, targetMembers){
var uniqueMembers = []
var counter =0
for(var i=0; i< newMembers.length; i++)
{
var isunique = true;
for(var j=0 ; j < targetMembers.length; j++) {
if(newMembers[i][0].trim() == targetMembers[j][0].trim())
{
isunique = false;
}
}
if(isunique){
uniqueMembers[counter] = []
uniqueMembers[counter][0] = newMembers[i][0]
counter++
}
}
return uniqueMembers
}
Bah, es wird mich nicht lassen ticken Sie Ihre Antwort. Ich weiß nichts über Skripting. Ich lieh mir jemandes Code und bekam nach und nach ein bisschen daraus .. wie würde ich auch nach Duplikaten im InputSoulData Sheet suchen ... Lol .. tut mir leid, es ist mir nicht so klar .. wenn ich mehr Zeit hätte Heute Abend würde ich so lange anstarren, bis es einen Sinn ergab ... Lol –
Ich werde die Antwort bearbeiten, um Sie in die richtige Richtung zu weisen, aber ich werde es Ihnen noch immer sagen. Besser zu stolpern als nie gefallen zu sein. –
hat die Antwort bearbeitet, damit Sie herausfinden können, wie Sie Ihren Code ändern können. PS: Wenn du deine googleSheet Link-Freigabe aktivierst, gebe ich dir Eingaben, während du deinen Code veränderst :) –