Google apps script form.deleteItem()结果为';未能编辑表单。请稍候,然后重试';

Google apps script form.deleteItem()结果为';未能编辑表单。请稍候,然后重试';,google-apps-script,Google Apps Script,我需要一致地重复使用特定的表单URL,同时保持使用脚本重新生成表单的能力。为此,我编写了一个函数来删除表单数据。最初,我让它运行form.getItems(),并在主题中看到了错误。我认为这是因为我不是程序员,而且我的代码可能非常低效,所以我重新编写了例程,以划分每个项目类型和每个项目删除之间的延迟。这让我的日常工作变得异常缓慢,但如果谷歌允许它工作的话,我可以应对这种缓慢 这是我目前拥有的代码,不幸的是,它仍然给我同样的错误。我的问题实际上是谷歌的后端问题吗???这是我的密码吗?两者都有 我有

我需要一致地重复使用特定的表单URL,同时保持使用脚本重新生成表单的能力。为此,我编写了一个函数来删除表单数据。最初,我让它运行form.getItems(),并在主题中看到了错误。我认为这是因为我不是程序员,而且我的代码可能非常低效,所以我重新编写了例程,以划分每个项目类型和每个项目删除之间的延迟。这让我的日常工作变得异常缓慢,但如果谷歌允许它工作的话,我可以应对这种缓慢

这是我目前拥有的代码,不幸的是,它仍然给我同样的错误。我的问题实际上是谷歌的后端问题吗???这是我的密码吗?两者都有

我有表单信息的全局变量:

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]);
  };
}
var formurl='*适合我的url*'
var form=FormApp.openByUrl(formurl);
函数DeleteFormItems(){
var formitems=form.getItems();
Logger.log('有'+formitems.length+'总表单项');

对于(var i=1;i嘿,老兄,我终于找到了解决同一问题的方法。试试这个:

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那样双重访问它

希望它能完美地为你工作


嘿,老兄,我终于找到了解决同一问题的方法。试试这个:

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那样双重访问它

希望它能完美地为你工作


我遇到了同样的错误。我最终发现我创建的列表和多项选择项被分配到了“根据答案转到页面”是问题。为了解决它,我首先删除了我想删除的每个列表和多项选择项中的选项,然后删除了这些项。我最后删除了所有其他项。到目前为止,这不再给我错误

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++;
  }
}
函数deletetethefreakinform(myForm){
//首先,删除列表项选项。然后删除列表项。
var listItems=form.getItems(FormApp.ItemType.LIST);
while(itemIndex
我遇到了同样的错误。我最终发现我创建的列表和多项选择项被分配到了“根据答案转到页面”是问题。为了解决它,我首先删除了我想删除的每个列表和多项选择项中的选项,然后删除了这些项。我最后删除了所有其他项。到目前为止,这不再给我错误

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++;
  }
}
函数deletetethefreakinform(myForm){
//首先,删除列表项选项。然后删除列表项。
var listItems=form.getItems(FormApp.ItemType.LIST);
while(itemIndex
我建议将deleteItem行更改为
F.deleteItems(F.getItems().length-1))
。这样可以防止在尝试删除非空PageBreakItem时出错。我建议将deleteItem行更改为
F.deleteItems(F.getItems().length-1))
。这样可以防止在尝试删除非空PageBreakItem时出错