【问题标题】:No item with the given ID can be found onSubmit Google Form在提交 Google 表单时找不到具有给定 ID 的项目
【发布时间】:2020-03-06 12:47:07
【问题描述】:

我创建了一个在 Google 表单上运行 onSubmit 的脚本。它应该获取上传到表单的图像的 ID,将图像作为 Blob 获取,然后将其转发到某个电子邮件地址。问题是,有时(大约十分之一),脚本会出现以下错误:

例外:找不到具有给定 ID 的项目,或者您没有找到 有权访问它。 在 on_Submit(代码:6:24)

我认为这与 Google 将文件上传/移动到云端硬盘所需的时间有关,因此我设置了一个超时来给它一些时间。错误仍然出现,频率稍低。有谁知道这可能出问题的地方吗?

代码:

function on_Submit(e) {
  Utilities.sleep(30 * 1000)
  var res  = e.response
  var image_id = res.getItemResponses()[0].getResponse()

  var image = DriveApp.getFileById(image_id).getBlob()}

on_Submit(e) 函数链接到手动触发器以启用 DriveApp 的使用。 谢谢

【问题讨论】:

  • 用户是否有可能没有上传图片,或者上传了不止一张图片到表单?在这些情况下, image_id 将分别是一个空字符串或逗号分隔的字符串。您可以使用 console.log(image_id) 来调查 image_id 是否是有效的文件 ID。
  • 感谢您的澄清。您能否将其发布为答案,以便其他可能面临此问题的用户更清楚?

标签: google-apps-script google-forms


【解决方案1】:

一些响应结果是多个文件上传。对这个问题的回答是一组 ID。这是正确的代码:

Utilities.sleep(30 * 1000)
  var res  = e.response
  var image_id = res.getItemResponses()[0].getResponse()
  console.log(image_id)
  if(Array.isArray(image_id)){
    var images = [];
    for(var i in image_id){
      var id = image_id[i]
      var image = DriveApp.getFileById(id).getBlob()
      images.push(image)
    }
    console.log(images)
    GmailApp.sendEmail(SOME_EMAIL, SUBJECT, BODY, {attachments: images})
  }
  else{
    var image = DriveApp.getFileById(image_id).getBlob()
    GmailApp.sendEmail(SOME_EMAIL, SUBJECT, BODY, {attachments: [image]})
  }

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2020-02-09
    • 2015-10-22
    • 2018-04-09
    相关资源
    最近更新 更多