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

Google Apps Script邮件附件报错:Invalid argument: attachments 求助

问题解决:Google Apps Script发送带附件邮件报错Invalid argument: attachments

错误原因

  1. 参数类型不匹配:getFilesByName()返回的是FileIterator对象,而GmailApp.sendEmail的attachments参数要求传入Blob或File对象的数组,类型不兼容导致报错。
  2. 函数调用错误:getFilesByName(nameMtnSheet)中nameMtnSheet是函数,未加括号调用,导致传入的是函数本身而非返回的文件名。

修正方案

直接使用创建好的newFile作为附件(无需重新从Drive中查找),既避免类型错误,又提升代码效率。

修正后的完整代码

function mtnPdfExport() {
 
  var ss = SpreadsheetApp.getActive();
  var sheets = ss.getSheets();
  var sheet = ss.getSheetByName("MTN")
  var exportNameMtn = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("X").getRange("BH11").getValue();

  // 隐藏非MTN工作表
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetName() !== "MTN") {
      sheets[i].hideSheet()
    }
  }
  
  // 生成PDF文件
  var newFile = DriveApp.createFile(ss.getBlob());
  
  // 恢复指定工作表显示
  for (var i = 0; i < sheets.length; i++) {
    var sheetName = sheets[i].getSheetName();
    if (sheetName !== "MTN" && sheetName !== "CB2" && sheetName !== "X") {
      sheets[i].showSheet()
    }
  }

  // 设置文件名并移动到目标文件夹
  var fileName = nameMtnSheet();
  newFile.setName(fileName);
  newFile.moveTo(DriveApp.getFolderById("1JBOod0Su8GwGH49ntejRWpjCSwoHVWhy")); 

  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DASH");
  activeSheet.activate();

  // 发送带附件的邮件,直接传入newFile数组
  GmailApp.sendEmail(
    "testemailme@gmail.com",
    "Mtnland customer job sheet",
    "Hi guys attached is a new customer account, thanks!",
    {attachments: [newFile]}
  );
}

// 确保nameMtnSheet函数已正确定义(返回文件名)
function nameMtnSheet() {
  // 可根据需求调整文件名逻辑,此处示例使用BH11单元格的值
  return SpreadsheetApp.getActiveSpreadsheet().getSheetByName("X").getRange("BH11").getValue();
}

关键修改点

  • 直接使用创建好的newFile作为附件,包装成数组[newFile]传入attachments参数,符合参数类型要求。
  • 提前获取文件名,避免重复调用nameMtnSheet()。
  • 补充nameMtnSheet函数的定义(原代码中调用了该函数但未给出实现)。

替代方案(若需从Drive中查找文件)

如果必须从Drive文件夹中获取文件,需遍历FileIterator提取文件对象:

// 获取文件迭代器
let fileIterator = DriveApp.getFolderById("1JBOod0Su8GwGH49ntejRWpjCSwoHVWhy").getFilesByName(nameMtnSheet());
var attachments = [];
// 遍历迭代器收集文件
while (fileIterator.hasNext()) {
  attachments.push(fileIterator.next());
}
// 发送邮件
GmailApp.sendEmail(
  "testemailme@gmail.com",
  "Mtnland customer job sheet",
  "Hi guys attached is a new customer account, thanks!",
  {attachments: attachments}
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:14:52