能否将Google Sheets中多个工作表作为单个邮件附件发送?
多工作表合并导出单个附件实现方案
可以实现该需求,调整逻辑为:预先指定需要导出的工作表名称,创建临时工作簿将目标工作表批量复制到临时文件中,导出临时文件为xlsx作为附件发送后自动删除临时文件,不会改动原工作簿的任何内容。
修改后的完整代码如下:
function emailauto() { // 配置参数区 const SOURCE_FILE_ID = "替换为你的原表格FileID"; const TARGET_SHEET_NAMES = ["工作表1", "工作表2", "工作表3"]; // 替换为你要导出的工作表名称,和原表名称完全一致 const RECEIVER_EMAILS = "email1@test.com,email2@test.com"; // 收件人邮箱 var date = Utilities.formatDate(new Date(), 'America/Santiago', 'yyyy-MM-dd HH:mm:ss') // 获取原工作簿 const sourceSS = SpreadsheetApp.openById(SOURCE_FILE_ID); // 创建临时工作簿 const tempSS = SpreadsheetApp.create("临时导出文件_" + date); const tempSSId = tempSS.getId(); // 批量复制目标工作表到临时工作簿 TARGET_SHEET_NAMES.forEach(sheetName => { const sourceSheet = sourceSS.getSheetByName(sheetName); if (sourceSheet) { // 校验工作表是否存在,避免报错 sourceSheet.copyTo(tempSS).setName(sheetName); } }); // 删除临时工作簿默认生成的空白Sheet1 tempSS.deleteSheet(tempSS.getSheetByName("Sheet1")); // 保存临时工作簿的修改 SpreadsheetApp.flush(); // 导出临时工作簿为xlsx var url = "https://docs.google.com/spreadsheets/d/" + tempSSId + "/export?format=xlsx&access_token=" + ScriptApp.getOAuthToken(); var file = UrlFetchApp.fetch(url).getBlob().setName("Filename_" + date + ".xlsx"); // 发送邮件 GmailApp.sendEmail(RECEIVER_EMAILS, 'Test', 'Test date: ' + date + '.\n\nRegards.', { attachments: [file], name: 'Tester' }); // 发送完成后删除临时文件,避免占用云端存储空间 DriveApp.getFileById(tempSSId).setTrashed(true); }
注意事项
- 代码里
配置参数区的内容需要根据你实际的情况替换,工作表名称要和原表中的名称完全匹配,包含大小写、空格 - 首次运行代码需要授权Drive、Sheet、Gmail相关的操作权限,正常授权即可,不会产生额外风险
- 如果需要调整导出的文件格式,仅需要修改export参数里的format值即可,比如要导出csv的话换成
format=csv即可
内容的提问来源于stack exchange,提问作者Ghw-ghw
相关产品推荐
相关产品推荐

