【问题标题】:Google Spreadsheet script using SpreadsheetApp.getActiveSheet(), changing to work in other sheet使用 SpreadsheetApp.getActiveSheet() 的 Google 电子表格脚本,更改为在其他工作表中工作
【发布时间】:2020-02-28 04:06:43
【问题描述】:

我正在使用带有 Google 电子表格的脚本来发送电子邮件。我的文件有 3 张,这张发送电子邮件的文件名为“EMAIL”。要发送的代码是这样的:

function sendEmails() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var emailAddress = 'destination@domain.com'; 
    var subject = 'Subject BlaBlaBla';  
    var dados = sheet.getRange ("B2:M10").getValues(); //range with mail content
    var message2 = getTable(dados); //format the range in html table

    //Envia o email em formato HTML
    MailApp.sendEmail({
      to: emailAddress,
      subject: subject,
      htmlBody: message2
    });
}

我在“EMAIL”表中有一个按钮,用于启动 sendEmails()。它工作正常。

我的问题是:

我想在另一个工作表中放置一个名为“2019”的按钮,该按钮也应该开始发送电子邮件,而没有激活工作表“EMAIL”。在没有激活“EMAIL”表的情况下,我应该对此代码进行哪些更改才能使用此函数 sendEmails()?

var sheet = SpreadsheetApp.getActiveSheet();

我必须改变一些东西来保持这个功能正常工作

【问题讨论】:

    标签: google-apps-script google-sheets spreadsheet


    【解决方案1】:
    • 您想通过提供工作表名称来运行sendEmails() 的功能。

    如果我的理解是正确的,那么这个修改呢?请认为这只是几个答案之一。

    模式一:

    在此模式中,脚本针对2019 的工作表名称运行。

    修改脚本:

    从:
    var sheet = SpreadsheetApp.getActiveSheet();
    
    到:
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2019");
    

    模式 2:

    在此模式中,当活动工作表为EMAIL2019 时,脚本将运行。

    修改脚本:

    function sendEmails() {
      var sheetNames = ["EMAIL", "2019"];
    
      var sheet = SpreadsheetApp.getActiveSheet();
      if (sheetNames.indexOf(sheet.getSheetName()) > 0) {
        var emailAddress = 'destination@domain.com'; 
        var subject = 'Subject BlaBlaBla';  
        var dados = sheet.getRange ("B2:M10").getValues(); //range with mail content
        var message2 = getTable(dados); //format the range in html table
    
        //Envia o email em formato HTML
        MailApp.sendEmail({
          to: emailAddress,
          subject: subject,
          htmlBody: message2
        });
      }
    }
    

    参考资料:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

    • 再次感谢!但是有没有办法不写工作表的名字?我想处理文件中的任何工作表 var sheet = "EMAIL";或指定包含函数数据的工作表的名称
    • 对不起,我认为这会起作用 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EMAIL");
    • 它有效!伟大的! var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EMAIL");
    • @Roberto Junior 感谢您的快速回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多