Ich habe dieses Skript, das mehrere Dinge mit Daten tut, sobald es in einem Google-Formular eingegeben wird, aber ich muss verklagen, dass, wenn zwei Teilnehmer genau den gleichen Namen haben, dass es den vorherigen Eintrag vollständig löscht.Wie verwenden Sie ein Skript, um eine Zeile in einer Tabelle zu löschen, die mit einem Formular verknüpft ist?
function formChanger() {
var doc = DocumentApp.openById('THIS WAS MY ID');
var body = doc.getBody();
var date = body.getListItems();
var dates = [];
for(var i = 0; i<date.length;i++)
{
dates.push(date[i].getText());
}
var form = FormApp.openById('THIS WAS MY ID');
var items = form.getItems();
var ss = SpreadsheetApp.openById("THIS WAS MY ID");
Logger.log(ss.getName());
var sheet = ss.getSheets()[0];
var values = sheet.getSheetValues(2, 4, sheet.getLastRow() , 1);
Logger.log(values);
var names = sheet.getSheetValues(2, 2, sheet.getLastRow(), 1);
var item = items[2].asMultipleChoiceItem();
var choices = item.getChoices()
for(var i=names.length; i>-1; i--){
for(var j=names.length; j>-1; j--){
if(names[i]==names[j] && i != j)
sheet.deleteRow(i);
}
}
var h = -1;
var j = -1;
var k = -1;
var l = -1;
for(var o = 0; o<values.length; o++){
if(choices[0].getValue().equals(values[o].toString()))
h++;
if(choices[1].getValue().equals(values[o].toString()))
j++;
if(choices[2].getValue().equals(values[o].toString()))
k++;
if(choices[3].getValue().equals(values[o].toString()))
l++;
}
if(h>3)
dates.splice(0,1);
if(j>3)
dates.splice(1, 1);
if(k>3)
dates.splice(2, 1);
if(l>3)
dates.splice(3, 1);
emptyDocument();
Logger.log(h);
Logger.log(j);
Logger.log(k);
Logger.log(l);
item.setChoices([
item.createChoice(dates[0]),
item.createChoice(dates[1]),
item.createChoice(dates[2]),
item.createChoice(dates[3])
]);
for(var i = 0; i<dates.length; i++)
body.appendListItem(dates[i]);
Logger.log(doc.getName()+" Contains:");
Logger.log(dates);
}
Ja der Code ist ein Chaos, und ich bin sicher, dass es eine bessere Art und Weise getan werden könnte, aber der wichtige Teil ist, dass ich in der Lage sein könnte, die Zeile von Informationen zu löschen, die wiederholt wird. Der Compiler erlaubt mir dies nicht, weil das Tabellenblatt mit dem Formular verknüpft ist. Gibt es einen Weg dahin?
Als ich Gehen Sie zum Löschen der Zeile, die Funktion kompiliert gut, aber wenn es tatsächlich ausgeführt wird, trifft es diesen Fehler: 'Kann Zeile mit Formularfragen nicht löschen. Ziehen Sie stattdessen in Betracht, die Zeile auszublenden. (Zeile 23, Datei "Code") 'so kann ich die deleteRow-Funktion nicht wirklich verwenden. – Maxunm
"Zeile mit Formularfragen" ist die oberste Zeile des Blattes. Das ist die einzige Zeile, die nicht gelöscht werden kann. Siehe mein Update zur Antwort. –