2013-06-26 58 views
0

我需要一直重複使用特定的表單URL,同時保持使用腳本重新生成表單的能力。爲了做到這一點,我寫了一個函數來刪除表單數據。最初,我讓它運行form.getItems()並看到主題中的錯誤。認爲這是因爲我不是程序員,而且我的代碼可能非常低效,所以我重新編寫了例程來分解每個itemType,並刪除每個項目之間的延遲。這讓我的程序變得非常慢,但如果Google能夠讓它運作起來,我可以處理得很慢。form.deleteItem()結果'無法編輯表單。請稍等,然後重試'

這是我目前的代碼,不幸的是,它仍然給我同樣的錯誤。我的問題實際上是Google的後端問題?它是我的代碼嗎?都?

我對形式的信息的全局變量:

var formurl='*a url that works for me*' 
var form=FormApp.openByUrl(formurl); 

function DeleteFormItems() { 
    var formcheckboxitems=form.getItems(FormApp.ItemType.CHECKBOX); 
    var formdateitems=form.getItems(FormApp.ItemType.DATE); 
    var formdatetimeitems=form.getItems(FormApp.ItemType.DATETIME); 
    var formdurationitems=form.getItems(FormApp.ItemType.DURATION); 
    var formgriditems=form.getItems(FormApp.ItemType.GRID); 
    var formimageitems=form.getItems(FormApp.ItemType.IMAGE); 
    var formlistitems=form.getItems(FormApp.ItemType.LIST); 
    var formmultiplechoiceitems=form.getItems(FormApp.ItemType.MULTIPLE_CHOICE); 
    var formpagebreakitems=form.getItems(FormApp.ItemType.PAGE_BREAK); 
    var formparagraphtextitems=form.getItems(FormApp.ItemType.PARAGRAPH_TEXT); 
    var formscaleitems=form.getItems(FormApp.ItemType.SCALE); 
    var formsectionheaderitems=form.getItems(FormApp.ItemType.SECTION_HEADER); 
    var formtextitems=form.getItems(FormApp.ItemType.TEXT); 
    var formtimeitems=form.getItems(FormApp.ItemType.TIME); 
    for (var i = formcheckboxitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formdateitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formdatetimeitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formdurationitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formgriditems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formimageitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formlistitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formmultiplechoiceitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formparagraphtextitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formscaleitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formsectionheaderitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formtextitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formtimeitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
    for (var i = formpagebreakitems.length-1; i >= 1; i--) { 
    Utilities.sleep(2000) 
    form.deleteItem(i); 
    }; 
} 

這裏是我的更新腳本,在那裏我仍然遇到的主題提到的錯誤,但它使更多的進步(刪除幾個項目)之前它得到消息。

var formurl='*a url that works for me*' 
var form=FormApp.openByUrl(formurl); 

function DeleteFormItems() { 
    var formitems=form.getItems(); 
Logger.log('There are '+formitems.length+' total form items'); 
    for (var i = 1; i <= formitems.length-1; i++) { 
    Utilities.sleep(2500) 
    form.deleteItem(formitems[i]); 
    }; 
} 

回答

4

嗨,我終於找到了解決同一問題的解決方法。試試這個:

function clearForm(F){ 
    //var F = FormApp.openById("your form") 
    var items= F.getItems().length; 
    while(F.getItems().length!=0){   
    try{  
     F.deleteItem(0); 
     } catch(error) 
     {Logger.log(error); 
     } 
    } 
} 

它沒有發生錯誤,它完全清除窗體。我並不是很認識爲什麼「while」比「for」更好,因爲它似乎並沒有像for那樣雙重訪問它。

希望它適合你!

https://stackoverflow.com/questions/tagged/google-apps-script

+0

我建議將deleteItem行更改爲F.deleteItems(F.getItems()。length-1))''。這可以防止在嘗試刪除非空的PageBreakItem時出現錯誤 –

0

我有同樣的錯誤。我最終發現我創建的列表和多選項是分配給「根據回答轉到頁面」的。是問題。爲了解決這個問題,我首先刪除了我想刪除的每個List和Multiple Choice項目中的選項,然後刪除這些項目。我最後刪除了所有其他項目。到目前爲止,這並沒有給我帶來錯誤。

function deleteTheFreakinForm(myForm){ 

    //First, remove list item choices. Then delete the list items. 

    var listItems = form.getItems(FormApp.ItemType.LIST); 

    while(itemIndex < listItems.length){ 
    listItems[itemIndex].asListItem().setChoiceValues(['']); 
    form.deleteItem(listItems[itemIndex]); 
    itemIndex++; 
    } 

    //Second, remove the multiple choice item choices. Then delete the multiple 
    //choice items. 

    var multipleChoiceItems = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE); 
    itemIndex=0; 
    while(itemIndex < multipleChoiceItems.length){ 
    multipleChoiceItems[itemIndex].asMultipleChoiceItem().setChoiceValues(['']); 
    form.deleteItem(multipleChoiceItems[itemIndex]); 
    itemIndex++; 
    } 

    //Finally, delete the remaining form items. 

    var items = form.getItems(); 
    itemIndex=0; 
    while(itemIndex < items.length){ 
    form.deleteItem(items[itemIndex]); 
    itemIndex++; 
    } 
} 
相關問題