如何使用Appscript将Google Sheet指定工作表作为PDF附件发送邮件
调整方案
原代码调用Spreadsheet.getAs(MimeType.PDF)时默认导出整个工作簿的所有可见工作表,要单独导出指定的sheet2工作表,需通过构造带工作表筛选参数的PDF导出链接实现,调整逻辑如下:
完整调整后代码
function sendReport() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // 获取指定的sheet2工作表 const targetSheet = ss.getSheetByName("sheet2"); // 构造PDF导出链接,可按需调整导出参数 const exportUrl = `${ss.getUrl()}/export?` + new URLSearchParams({ format: "pdf", gid: targetSheet.getSheetId(), // 指定仅导出sheet2 portrait: true, // 纵向排版,改为false则为横向 size: "A4", // 纸张尺寸 fitw: true, // 内容适配页面宽度 gridlines: false, // 不导出网格线 printtitle: false, // 不显示工作表名称 }); // 拉取PDF文件流 const pdfBlob = UrlFetchApp.fetch(exportUrl, { headers: { "Authorization": `Bearer ${ScriptApp.getOAuthToken()}` } }).getBlob().setName("Monthly sales report"); // 原有邮件配置,仅替换附件部分 var message = { to: "youremail@example.com", subject: "Monthly sales report", body: "Hi team,\n\nPlease find the monthly report attached.\n\nThank you,\nBob", name: "Bob", attachments: [pdfBlob] } MailApp.sendEmail(message); // 原有隐藏/激活Data工作表的逻辑,对单独导出sheet2无影响,可按需保留或删除 // ss.getSheetByName("Data").hideSheet(); // ss.getSheetByName("Data").activate(); }
关键说明
- 该方案无需隐藏其他工作表即可实现仅导出
sheet2的效果,原有操作Data工作表的代码可根据实际业务需求自行决定是否保留 - 导出URL的参数可灵活调整,比如修改
size为LETTER切换纸张大小,修改gridlines为true导出带网格线的PDF等
内容的提问来源于stack exchange,提问作者NOOR UL KARIM
相关产品推荐
相关产品推荐

