如何从FormApp对象中删除所有项目?

时间:2014-06-10 18:18:33

标签: javascript google-apps-script google-form

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);
}

但是,这会给我一个超出范围的错误。有人能指出我正确的方向吗?

8 个答案:

答案 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)}) 
}