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

Google Apps Script附加多张图片时DriveApp.getFileById报错求助

Google Apps Script 多附件发送报错解决方案

报错根因

你的代码存在3个核心问题,直接触发了DriveApp.getFileById调用异常:

  1. 邮件发送逻辑MailApp.sendEmail放在了for循环外部,只会在遍历完所有表格行后发送1次邮件,仅能取到最后一行的变量值。如果遍历过程中某行的文件ID为空、无效,就会直接抛出异常终止运行。
  2. 附件参数中错误调用了image.next()方法,DriveApp.getFileById().getBlob()返回的是直接可用的Blob对象,不存在next()方法,会触发调用异常。
  3. 没有做参数有效性校验,空值、格式错误的文件ID会直接导致getFileById调用失败。

修正后代码

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 1; // 若表格有表头可将起始行改为2
  var numRows = 3; // 需要处理的数据总行数
  var dataRange = sheet.getRange(startRow, 1, numRows, 5);
  var data = dataRange.getValues();
  
  // 逐行处理发送邮件
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var emailAddress = row[0];
    var message = row[1];
    // 去除文件ID前后空格,避免无效字符
    var fileId1 = row[2] ? row[2].toString().trim() : '';
    var fileId2 = row[3] ? row[3].toString().trim() : '';
    var subject = 'TAYDO 2021 Certificate';
    
    // 跳过必填项为空的行,避免无效报错
    if (!emailAddress || !fileId1 || !fileId2) continue;
    
    try {
      var image = DriveApp.getFileById(fileId1).getBlob();
      var image2 = DriveApp.getFileById(fileId2).getBlob();
      
      MailApp.sendEmail({
        to: emailAddress, 
        subject: subject,   
        body: message,  
        attachments: [image, image2]
      });
    } catch (e) {
      // 输出错误行信息方便排查,不会阻断其他行发送
      console.log(`第${startRow + i}行发送失败,错误信息:` + e.message);
    }
  }
}

额外校验项

运行前请先确认:

  • 表格第3、4列填写的是Google Drive文件的正确ID,无空值、无多余空格
  • 对应ID的文件未被删除,归属当前脚本运行的谷歌账号所有
  • 脚本的Drive访问、邮件发送权限已正常授权

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:09:02