I recently asked a question about how to add items to a Google Form from a Google Spreadsheet。而且效果很好。但是,我不必使用FormApp.create()
,而是必须使用.openByUrl()
,因为ID必须保持不变。问题是,如果我再次运行我的脚本,它将打开现有表单(很棒),然后将更多项目附加到现有表单。
这种行为很有道理,但并不是我想要的。所以我想我在删除电子表格中的新项目之前只删除所有现有项目。我咨询了the Google dev site for Form Services,觉得我应该拥有所有的东西。不过,我无法把它们放在一起。
我现在正在做以下事情:
var form = FormApp.openByUrl('https://docs.google.com/forms/d/.../edit');
var items = form.getItems();
for (var i in items) {
form.deleteItem(i);
}
但是,这会给我一个超出范围的错误。有人能指出我正确的方向吗?
答案 0 :(得分:4)
问题在于如何迭代数组。
试试这个:
var form = FormApp.openByUrl('https://docs.google.com/forms/d/.../edit');
var items = form.getItems();
for (var i=0; i<items.length; i++) {
form.deleteItem(i);
}
答案 1 :(得分:3)
function clearForm(){
var items = form.getItems();
while(items.length > 0){
form.deleteItem(items.pop());
}
}
答案 2 :(得分:1)
当我遇到同样的问题时,这对我有用:
client
答案 3 :(得分:0)
首先删除最后一项并重复,直到删除所有项目。这可以通过反向循环来完成:
target=_blank
另一种方法是使用function deleteAllItems(){
var form = FormApp.openById(/*put here your form id*/);
var items = form.getItems();
var end = items.length - 1;
for(var i = end ; i >= 0; i--){
form.deleteItem(i);
}
}
避免变量索引,因此无论是使用常规循环还是反向循环,第一项都将被删除。注意:在另一个答案的评论中已经提到过这一点。
答案 4 :(得分:0)
var form = FormApp.openByUrl('https://docs.google.com/forms/.../edit');
var items = form.getItems();
while(items.length > 0)
{
form.deleteItem(items.pop());
}
这对我有用。
答案 5 :(得分:0)
当您在循环中检查variable = form.getItems()的长度时,它会经历一些错误,因为该长度没有变化,并且循环最终是无限的且贯穿错误。 因此,这是我对问题的解决方案:
for(;form.getItems().length>0;)
{
form.deleteItem(0);
}
答案 6 :(得分:0)
我遇到了同样的问题。但是,我已通过以相反的顺序进行迭代来解决此问题。
var form=FormApp.openByUrl('form url here');
var Items=form.getItems();
var len=Items.length;
for (var i=Items.length-1;i>2;i--){ //Delete every item except first three items
form.deleteItem(i)
}
答案 7 :(得分:0)
我也遇到了同样的问题。这个对我有用:
function deleteItems(){
var form = FormApp.openById('ID');
var items = form.getItems();
items.forEach(function(e){form.deleteItem(e)})
}