You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:15:03