一个Form Response在Google Script中无响应如何处理if语句?

How to deal with if statement when one Form Response has no response in Google Script?

我正在尝试创建一个脚本,当有人提交 google 表单时发送电子邮件。该表单包括一个可选的文件上传,然后脚本将以 pdf 格式附加到电子邮件中。

我面临的问题是如何在响应为空时忽略创建附件的过程。

下面的示例代码

function getIdFrom(url) {
  var id = '';
  var parts = url.split(
    /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/
  );
  if (url.indexOf('?id=') >= 0) {
    id = parts[6].split('=')[1].replace('&usp', '');
    return id;
  } else {
    id = parts[5].split('/');
    var sortArr = id.sort(function (a, b) {
      return b.length - a.length;
    });
    id = sortArr[0];
    return id; //returns google doc id.
  }
}

function onFormSubmit(response) {
  var link = response.namedValues['Upload file'];

  if (typeof link !== "undefined" && link.length > 0) { // I think it's here that's the issue
    var uploadFileId = getIdFrom(link[0]);
    var uploadFile = DriveApp.getFileById(uploadFileId);
    var uploadFileType = (function () {
      if (uploadFile.getMimeType().includes('image')) {
        return uploadFile.getMimeType();
      } else {
        return 'application/pdf';
      }
     };
    var attachArr = [uploadFile.getAs(uploadFileType)];
  } 
  // etc etc send email.
}

如果用户提交带有上传文件的表单,工作正常。

但是,如果提交表单时没有在“上传文件”问题中输入任何内容,我会在 getIdFrom(url) 函数我假设是因为它仍在尝试通过 getIdFrom() 传递 link 即使它不应该因为它未定义。

奇怪的是,当我使用我拥有的两个测试输入时,它工作得非常好,其中一个 'Upload File' 存在但为空,另一个根本不存在。

我不确定我在这里遗漏了什么。

此外,我毫不怀疑这是一种混乱的做事方式,但我做到了。

  • response.namedValues['Upload file']是一个对象

  • 即使它是空的它也至少有 >0

    的长度

解决方法

将您的 if 语句修改为

if (link[0].length > 0) { 
  ...
}