【问题标题】:Error with deleting items from Google Form从 Google 表单中删除项目时出错
【发布时间】:2019-08-14 13:01:29
【问题描述】:

在我的 Google 表单中,我有 5 个部分,5 个项目:每个部分一个项目,4 个列表项目和 1 个 CheckboxGrid 项目。使用此代码从项目中清除表单后:

function clearAll(form){
  var items = form.getItems();
  for (var i=0; i<items.length; i++) {
    form.deleteItem(i);
  }
}

我有一个错误“无法打开索引为 5 的项目。可用项目数:5” 它删除了所有项目,但没有触及部分。 还尝试了不同的删除项目的方法,例如:

function clearForm(){
 var items = form.getItems();
 while(items.length > 0){
  form.deleteItem(items.pop());
  }
 }

这会导致错误“无效的表单更新请求。”符合pop()函数。它只删除了最后一项。 也许访问项目、部分有一些问题?

【问题讨论】:

  • 如果您的脚本用于删除 items,为什么要删除 sections
  • 如何避免或删除部分?

标签: google-apps-script google-forms


【解决方案1】:

发生错误是因为索引是基于 0(零)的,换句话说,在 5 个元素的集合上,最后一个元素的索引是 4。

另一方面,如果您将使用循环来删除所有表单项,包括部分,它应该向后迭代。

function clearAll(form){
  var items = form.getItems();
  for (var i=items.length-1; i>=0; i--) {
    form.deleteItem(i);
  }
}

相关

Google Script - Forms - Issues Deleting Page Breaks/Sections - "Invalid data updating form"

【讨论】:

  • 此代码还会出现错误“无效的表单更新请求”。作为带有 pop() 的版本。也许这是访问项目/部分的一些问题?
  • pop() 返回数组的最后一个元素,而 deleteItem 需要一个整数
【解决方案2】:

如果您使用删除计数器,那么我认为您可以这样做:

function clearAll(form){
  var items=form.getItems();
  var d=0;//deleted items counter
  for (var i=0; i<items.length; i++) {
    form.deleteItem(i-d++);
  }
}

这也适用于电子表格中的行。这允许您在循环中正常递增。

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多