Google Apps Script邮件附件报错:Invalid argument: attachments 求助
问题解决:Google Apps Script发送带附件邮件报错Invalid argument: attachments
错误原因
- 参数类型不匹配:
getFilesByName()返回的是FileIterator对象,而GmailApp.sendEmail的attachments参数要求传入Blob或File对象的数组,类型不兼容导致报错。 - 函数调用错误:
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
相关产品推荐
相关产品推荐

