Google Apps Script附加多张图片时DriveApp.getFileById报错求助
Google Apps Script 多附件发送报错解决方案
报错根因
你的代码存在3个核心问题,直接触发了DriveApp.getFileById调用异常:
- 邮件发送逻辑
MailApp.sendEmail放在了for循环外部,只会在遍历完所有表格行后发送1次邮件,仅能取到最后一行的变量值。如果遍历过程中某行的文件ID为空、无效,就会直接抛出异常终止运行。 - 附件参数中错误调用了
image.next()方法,DriveApp.getFileById().getBlob()返回的是直接可用的Blob对象,不存在next()方法,会触发调用异常。 - 没有做参数有效性校验,空值、格式错误的文件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
相关产品推荐
相关产品推荐

