You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Google Apps Script:如何通过Google表单上传文件的URL在自动回复邮件中附加对应PDF文件?

解决Google Apps Script中通过Drive文件URL获取文件并作为邮件附件的问题

首先,你提到找不到GetFileByURL方法是正常的——Google Apps Script的DriveApp确实没有这个直接方法,但我们可以通过提取文件URL中的文件ID来实现需求,完全不需要让用户手动填写文件名,彻底规避人为错误。

核心思路:从Drive文件URL中提取文件ID

Google Drive中文件的URL通常是以下几种格式之一:

  • https://drive.google.com/file/d/[FILE_ID]/view
  • https://drive.google.com/open?id=[FILE_ID]
  • https://drive.google.com/uc?id=[FILE_ID]

不管哪种格式,我们都可以用正则表达式提取出中间的[FILE_ID],再通过DriveApp.getFileById(FILE_ID)获取对应的文件对象。

修改后的完整代码

我帮你调整了原代码,添加了提取文件ID的逻辑,替换掉原来依赖文件名的部分:

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");
  
  // 获取表单提交的核心数据
  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.");

  // 从Drive URL中提取文件ID的工具函数
  function getFileIdFromUrl(url) {
    // 匹配绝大多数Drive文件链接格式的正则表达式
    var match = url.match(/[-\w]{25,}/);
    return match ? match[0] : null;
  }

  var fileId = getFileIdFromUrl(fileURL);
  if (fileId) {
    try {
      var targetFile = DriveApp.getFileById(fileId);
      // 发送带附件的邮件
      MailApp.sendEmail({
        to: parent_email,
        name: parent_name,
        htmlBody: formReceived.evaluate().getContent(),
        attachments: [targetFile.getAs(MimeType.PDF)]
      });
      // 更新发送成功的时间戳
      var now = new Date();
      var timeStamp = Utilities.formatDate(now, 'GMT+8', "YYYY.MM.dd HH:mm:ss");
      ss.getRange('E'+row).setValue(timeStamp); // 修正原代码中未定义的ws变量,统一使用ss
    } catch (error) {
      // 捕获异常并记录具体错误信息
      ss.getRange('E'+row).setValue("Error: " + error.message);
    }
  } else {
    ss.getRange('E'+row).setValue("Error: Invalid file URL");
  }
}

关键修改点说明

  1. 新增getFileIdFromUrl函数:用正则表达式一键提取文件ID,兼容各种Drive文件链接格式,无需依赖用户输入。
  2. 替换文件获取逻辑:不再使用易出错的getFilesByName,直接通过提取到的ID调用DriveApp.getFileById获取文件,精准且可靠。
  3. 增加错误处理机制:添加try-catch块捕获文件获取或邮件发送时的异常,在Sheet中记录具体错误信息,方便后续排查问题。
  4. 修正原代码小问题:原代码中使用了未定义的ws变量,这里统一改为ss(当前活动表格),避免运行报错。

额外提醒

  • 权限问题:表单上传的文件默认归属表单所有者,只要脚本运行者是表单/Sheet的所有者,权限通常不会有问题。
  • 文件类型校验:如果需要确保只发送PDF文件,可以在获取文件后添加判断:if (targetFile.getMimeType() === MimeType.PDF),不符合则跳过发送并记录状态。

内容的提问来源于stack exchange,提问作者dracomagmus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:07:34