使用Google Apps Script发送表格PDF附件遇TypeError问题求助
问题分析与解决方案
错误根源
你碰到的TypeError: sheet.getAs() is not a function和TypeError: sheet.getBlob() is not a function,核心问题是Google Apps Script的Sheet(单个工作表)对象并不提供这两个方法:
getAs()和getBlob()属于Spreadsheet(整个电子文档)或实现BlobSource接口的对象(如文件、图片),单个工作表实例无法调用这两个方法。
修复方案
方案1:通过原生API指定导出工作表
利用整个电子表格的getAs()方法,先设置导出范围为目标工作表:
function dailyOnHandReport() { var ss = SpreadsheetApp.openById("1axXcJKSawmrlLJYd1YepZZX-3hub7SCAbrE8Su3thMc"); var sheet = ss.getSheetByName("Sheet1"); // 设置仅导出目标工作表 ss.setActiveSheet(sheet); ss.setSpreadsheetDisplayOption(SpreadsheetApp.DisplayOption.FORMATTED); // 导出为PDF并设置文件名 var pdf = ss.getAs(MimeType.PDF); pdf.setName("Daily_On_Hand_Sheet.pdf"); var message = { to: "starfire3d@gmail.com", subject: "Daily On Hand Sheet", body: "Here's our On Hands for today\n\nHave a great evening!.", attachments: [pdf] }; MailApp.sendEmail(message); }
方案2:优化URL导出方案(你的更新版优化)
你用URL导出的思路是可行的,补充细节让导出更可控:
function dailyOnHandReport() { var spreadsheetId = "1axXcJKSawmrlLJYd1YepZZX-3hub7SCAbrE8Su3thMc"; var ss = SpreadsheetApp.openById(spreadsheetId); var sheet = ss.getSheetByName("Sheet1"); var sheetId = sheet.getSheetId(); // 构造带参数的导出URL,可按需调整PDF样式 var url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/export?` + `format=pdf` + `&gid=${sheetId}` + `&portrait=false` + // 横向导出 `&scale=4`; // 适应页面宽度 var token = ScriptApp.getOAuthToken(); var pdfBlob = UrlFetchApp.fetch(url, { headers: { "Authorization": `Bearer ${token}` } }).getBlob(); pdfBlob.setName("Daily_On_Hand_Sheet.pdf"); var message = { to: "starfire3d@gmail.com", subject: "Daily On Hand Sheet", body: "Here's our On Hands for today.\n\nHave a great evening!.", attachments: [pdfBlob] }; MailApp.sendEmail(message); }
注意事项
- 首次运行脚本时,需授权脚本获取电子表格访问和外部请求权限;
- 若需导出多个工作表,可在URL中追加多个
&gid=工作表ID参数,或调整setActiveSheet逻辑批量设置。
内容的提问来源于stack exchange,提问作者david mcgovern
相关产品推荐
相关产品推荐

