使用Google Apps Script通过WebApp发邮件前隐藏工作表的问题
你的代码存在以下几处问题,修复后即可实现邮件发送前后工作表隐藏的需求:
- 菜单绑定的调用函数名与实际发邮件的函数名不匹配:自定义菜单配置的触发函数是
salesAgent,但你实际写的发邮件逻辑函数名为email,导致点击菜单无响应。 - 隐藏工作表的语法错误:最后一行隐藏工作表的代码缺少当前表格实例前缀,且方法名大小写错误,
hidesheet正确写法为hideSheet。 - 基础语法错误:邮件主题变量定义时缺少闭合的双引号,邮件正文拼接时误用
.作为字符串拼接符,同时正文末尾调用了未定义的spmail变量,你实际定义的对应变量为spemail。 - 多余的激活操作:对隐藏工作表调用
activate()方法可能导致工作表临时暴露,无需激活即可正常读取工作表内的数据。 - 缺少发送前隐藏逻辑:原有代码仅在发送后尝试隐藏,未添加发送前的隐藏判断。
修正后的完整代码如下:
function Onopen() { var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu('自定义菜单'); var item = menu.addItem('发送销售报表','salesAgent'); item.addToUi(); } function salesAgent(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var reportSheet = ss.getSheetByName("Sales Report"); var salesSheet = ss.getSheetByName("Sales"); // 发送前先确保两个工作表都处于隐藏状态 if(!reportSheet.isSheetHidden()) reportSheet.hideSheet(); if(!salesSheet.isSheetHidden()) salesSheet.hideSheet(); var lrow = reportSheet.getLastRow(); var rangeEdit = reportSheet.getRange("D2").getA1Notation(); var client = reportSheet.getRange("E4").getValue(); var salesperson = reportSheet.getRange("E3").getValue(); var receiveEmail = reportSheet.getRange("E5").getValue(); var spemail = reportSheet.getRange("E2").getValue(); var address = reportSheet.getRange("C1").getValue(); var status = reportSheet.getRange("D2").getValue(); // 邮件主题 var subject = "销售报表"; // 邮件正文 var body = "您好 " + client + ", <br><br> 请查收附件中的报表。<br><br> 如有疑问请随时告知我们。<br><br> 谢谢,<br><br> " + spemail; var aliases = GmailApp.getAliases(); Logger.log(aliases); Logger.log(aliases[0]); // 导出PDF的基础配置 var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId()); var url_ext = 'exportFormat=pdf&format=pdf' + '&size=letter' + '&portrait=True' + '&fitw=true' + '&sheetnames=false&printtitle=false' + '&pagenumbers=false&gridlines=false' + '&fzr=false' + '&gid='; var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url + url_ext + reportSheet.getSheetId(), { headers: { 'Authorization': 'Bearer ' + token } }); var blobs = response.getBlob().setName(reportSheet.getName() + '.pdf'); Logger.log("已使用存储空间: " + DriveApp.getStorageUsed()); GmailApp.sendEmail(receiveEmail, subject, body, { htmlBody: body, name:'销售部', bcc: spemail, noReply: true, attachments:[blobs] }); // 发送后再次确认工作表隐藏 if(!reportSheet.isSheetHidden()) reportSheet.hideSheet(); if(!salesSheet.isSheetHidden()) salesSheet.hideSheet(); } function doGet() { return HtmlService.createHtmlOutputFromFile('html filename without extension'); }
内容的提问来源于stack exchange,提问作者retter4242
相关产品推荐
相关产品推荐

