发送带附件邮件时报file.next is not a function错误如何解决
报错修复方案
错误根因
file.next is not a function 的触发原因是你代码中的file变量是通过字符串切片得到的Google Drive文件ID字符串,只有DriveApp.getFiles()返回的文件迭代器对象才具备next()方法,字符串类型不支持调用该方法。
修复步骤
- 先通过切片得到的文件ID调用
DriveApp.getFileById(),获取到对应的Drive文件对象 - 直接使用该文件对象调用
getAs方法生成附件,不需要额外调用next()
修正后完整代码
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet_bd = ss.getSheetByName('BD'); var numRows = sheet_bd.getLastRow(); var pdf = sheet_bd.getRange(numRows, 3).getValue(); // 提取文件ID var fileId = pdf.slice(33, 66); // 根据ID获取Drive文件对象 var file = DriveApp.getFileById(fileId); MailApp.sendEmail({ to: 'email@email.com', subject: "test", body:"Test message", attachments: [file.getAs(MimeType.PDF)], }); }
注意事项
首次运行修正后的代码时,如果出现权限提示,按照指引授予脚本Google Drive的读取权限即可正常执行。
内容的提问来源于stack exchange,提问作者Alvim Silva
相关产品推荐
相关产品推荐

