2014-06-10 57 views
2

I recently asked a question about how to add items to a Google Form from a Google Spreadsheet。它效果很好。儘管如此,我不必使用FormApp.create(),因爲ID必須保持不變。問題是,如果我再次運行我的腳本,它會打開現有的窗體(很棒),然後將更多的項目追加到現有窗體。如何從FormApp對象中刪除所有項目?

這種行爲使得理想,但不是我想要的。所以我想我會刪除所有現有的項目,然後再從我的電子表格中添加新的項目。我諮詢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); 
} 

然而,這會給我一個超出範圍的錯誤。有人能指引我朝着正確的方向嗎?

回答

3

問題在於如何遍歷數組。通過刪除最後一個項目

for (var i=0; i<items.length; i++) { 
    if (items[i] != null){ 
     form.deleteItem(i); 
    } 
} 
+0

這仍然給我錯誤,例如'不能訪問索引處的項目:18.項目數量:18.'索引似乎出錯了。 – Florian

+3

剛剛遇到同樣的問題。隨着項目被刪除,索引正在改變。我的解決方案是使用'form.deleteItem(0)',它只是一遍又一遍地刪除第一個對象,直到它們全部消失(只需編輯@ teatimer的答案來反映這一點)。 –

1

這爲我工作,當我遇到了同樣的問題。這可以通過一個相反的for循環來完成:

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

另一種方法是通過使用0避免可變折射率,所以第一項將被刪除,則使用不管是否規則或反向循環。注意:這已在另一個答案的評論中提及。

0

開始重複,直到所有的項目都將被刪除:

試試這個:

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); 
} 
相關問題