【问题标题】:How to deal with if statement when one Form Response has no response in Google Script?当一个表单响应在 Google Script 中没有响应时如何处理 if 语句?
【发布时间】:2020-08-19 07:37:08
【问题描述】:

我正在尝试创建一个脚本,当有人提交谷歌表单时发送电子邮件。该表单包括一个可选的文件上传,然后脚本将作为 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) 函数中收到“TypeError: Cannot read property 'split' of undefined”,因为它仍在尝试通过getIdFrom() 传递link,即使它不应该因为它是未定义的。

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

我不确定我在这里缺少什么。

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

【问题讨论】:

    标签: google-apps-script google-forms


    【解决方案1】:
    • response.namedValues['Upload file'] 是一个对象

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

    解决方法

    将您的if 语句修改为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 2017-08-11
      相关资源
      最近更新 更多