【问题标题】:Google form upload + attach the uploaded pdf in an Auto email replyGoogle 表单上传 + 在自动电子邮件回复中附加上传的 pdf
【发布时间】:2021-11-09 11:06:10
【问题描述】:

我目前正在做一个项目,我让用户填写一个简单的姓名、电子邮件地址表格并上传一个 pdf。

提交表单时,该表单的目标 GSheet 包含名称、电子邮件地址和上传 PDF 的 URL。提交表单后,我可以使用带有 html 的电子邮件进行自动回复,上面写着“收到您的表单提交和附件”。但是是否可以仅使用 URL 将上传的 pdf 附加到该电子邮件中?我找不到 GetFileByURL 的 ClassDrive。只能找到 getfilebyname/type。

我可以想到另一种方法,即让用户手动输入表单中要上传的文件的名称,并让谷歌应用脚​​本获取文件名。然而,我试图避免人为错误。人为错误,例如上传的文件名与表单中输入的文件名不匹配。 :)

    function onSubmit(e) {
      var ss = SpreadsheetApp.getActive();
      var range = e.range
      var row = Number(range.getRow());
    
      var upFolder = DriveApp.getFolderById("ADDRESS OF WHERE THE UPLOADED FILE FROM THE FORM IS");
    
      var formReceived = HtmlService.createTemplateFromFile("HTML Email"); //get the html template
    
      var parent_name = ss.getRange('B'+row).getValue();
      var parent_email = ss.getRange('C'+row).getValue();
      var fileURL = ss.getRange('D'+row).getValue();
    
      ss.getRange('E'+row).setValue("Error! Email not sent.");
    
      //Tag input into the html
      formReceived.parent_name=parent_name
    
    //Once the form is submitted, the URL will show up on the Gsheet
    //in column D. Is there a way to attach the file from that URL into the mailapp below.
   //Not using the line below (getfilesbyname).

        var invoicereceipt = upFolder.getFilesByName("Can be manual input from form");
    
        if(invoicereceipt.hasNext()){
          MailApp.sendEmail({
          to: parent_email,
          name: parent_name,
          htmlBody : formReceived.evaluate().getContent(),
          attachments: [invoicereceipt.next().getAs(MimeType.PDF)],
          });
            var now = new Date()
            var k = Utilities.formatDate(now,'GMT+8',"YYYY.MM.dd HH:mm:ss")
            ws.getRange('E'+index).setValue(k); 
        }
    
    }

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解But is it possible to attach that uploaded pdf in that email just using the URL? I am not able to find a ClassDrive for GetFileByURL. Only could find getfilebyname/type.。我能问一下你当前的剧本问题和你的目标吗?而且,你能提供你当前的脚本吗?
  • 不幸的是,我没有工作脚本。目标:用户提交一个包含 3 个输入的谷歌表单。姓名、电子邮件地址、pdf 上传。 > 谷歌表格的目的地,有 3 列。上传的 pdf 的姓名、电子邮件地址、URL。 > 一封自动电子邮件将发送到电子邮件地址,电子邮件正文为“已收到”+ 附加在该电子邮件中的是通过表单提交的上传的 pdf。
  • 感谢您的回复。我不得不再次为我糟糕的英语水平道歉。不幸的是,我仍然无法理解你的问题。但我想试着理解它。当我能正确理解它时,我想考虑解决方案。如果您能原谅我糟糕的英语水平,我将不胜感激。
  • Google 表单有 3 个问题:姓名、电子邮件地址、上传文件。当用户提交表单并上传 pdf 文件时,我需要 Google 应用脚本自动向电子邮件地址发送电子邮件并附加上传的 pdf 文件。我还使用脚本编辑了我的原始帖子。
  • 感谢您回复并添加更多信息。根据您的附加信息,我提出了一个修改后的脚本作为答案。你能确认一下吗?如果这没有用,我深表歉意。

标签: google-apps-script google-sheets google-forms


【解决方案1】:

我相信你的目标如下。

  • 您希望在提交 Google 表单时发送电子邮件。此时,您希望将上传的 PDF 文件附加到电子邮件中。
  • 您的脚本存在于与 Google 表单链接的 Google 电子表格中。
  • onSubmit 的函数已安装为 OnSubmit 可安装触发器。

修改点:

  • 不包括电子邮件标题。在这种情况下,会发生错误。
  • wsindex 未声明。
  • 在这种情况下,我认为可以使用事件对象。

当这些点反映到脚本中时,它变成如下。

修改脚本:

function onSubmit(e) {
  var [, parent_name, parent_email, fileURL] = e.values;
  var formReceived = HtmlService.createTemplateFromFile("HTML Email");
  formReceived.parent_name = parent_name;
  MailApp.sendEmail({
    subject: "sample mail",
    to: parent_email,
    name: parent_name,
    htmlBody: formReceived.evaluate().getContent(),
    attachments: [DriveApp.getFileById(fileURL.split("=").pop())],
  });

  // e.range.offset(0, 1).setValue("Error! Email not sent."); // I'm not sure whether you want to use this line.
}
  • 上传的PDF文件由DriveApp.getFileById(fileURL.split("=").pop())检索。

  • 在这种情况下,请删除可安装的 OnSubmit 触发器并重新安装。这样,就包含了其他范围。

注意:

  • 这是一个简单的修改脚本。所以请根据您的实际情况进行修改。

参考:

【讨论】:

  • 您好田池,非常感谢您的回复和帮助!是的,它有效!我想更多地了解这一行 [DriveApp.getFileById(fileURL.split("=").pop())]。 split("=") 和 pop() 有什么作用?
  • @dracomagmus 感谢您的回复。我很高兴你的问题得到了解决。关于您的附加问题,上传文件时,URL 类似于https://drive.google.com/open?id=###fileURL.split("=").pop() 从 URL 中检索 ###。 URL 由split("=") 分割。通过这个,它是["https://drive.google.com/open?id", "###"]。由此,###pop() 检索。 pop() 用于从数组中检索最后一个元素。 Ref如果这没有用,我很抱歉。
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 2015-05-29
相关资源
最近更新 更多