【问题标题】:Google Sheets Script MailApp.sendEmail promptGoogle 表格脚本 MailApp.sendEmail 提示
【发布时间】:2019-05-20 18:05:18
【问题描述】:

尝试更改以下脚本以提示输入电子邮件地址。我能够将其作为附加组件加载到 Google 工作表中,并且工作正常,但我希望能够在每次运行时更改“收件人”地址。有什么方法可以强制进行某种提示,以便我可以在每次运行时输入电子邮件地址?

    function onOpen() { 
  // Try New Google Sheets method
  try{
    var ui = SpreadsheetApp.getUi();
    ui.createMenu('SendMail')
    .addItem('Send Report', 'getGoogleSpreadsheetAsExcel')
    .addToUi(); 
  }

  // Log the error
  catch (e){Logger.log(e)}

}

function getGoogleSpreadsheetAsExcel(){

  try {

    var ss = SpreadsheetApp.getActive();

    var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=csv";

    var params = {
      method      : "get",
      headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
      muteHttpExceptions: true
    };

    var blob = UrlFetchApp.fetch(url, params).getBlob();

    blob.setName(ss.getName() + ".csv");

    MailApp.sendEmail("xxxxxx@gmail.com", "Stock report of today", "The XLSX file is attached", {attachments: [blob]});

  } catch (f) {
    Logger.log(f.toString());
  }
}

【问题讨论】:

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


    【解决方案1】:

    您需要做的就是获取电子表格的 UI 并发送提示,然后通过 if 语句运行它以确保按下了正确的按钮,请尝试以下操作:

    function getGoogleSpreadsheetAsExcel(){
    
      try {
    
        var ss = SpreadsheetApp.getActive();
    
        var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=csv";
    
        var params = {
          method      : "get",
          headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
          muteHttpExceptions: true
        };
    
        var blob = UrlFetchApp.fetch(url, params).getBlob();
    
        blob.setName(ss.getName() + ".csv");
    
        var ui = SpreadsheetApp.getUi();
        var prompt = ui.prompt('Enter email address:', '',ui.ButtonSet.OK_CANCEL);
    
        if (prompt.getSelectedButton() == 'OK') {
    
          var mail = prompt.getResponseText();
          MailApp.sendEmail(mail, "Stock report of today", "The XLSX file is attached", {attachments: [blob]});
        }
    
      } catch (f) {
        Logger.log(f.toString());
      }
    }
    

    代码提示输入电子邮件地址:

    var prompt = ui.prompt('Enter email address:', '',ui.ButtonSet.OK_CANCEL);
    

    然后运行一个快速的 if 语句以确保按下的按钮是“OK”,如果它被取消,它将什么也不做。

    if (prompt.getSelectedButton() == 'OK') {
    
      var mail = prompt.getResponseText();
      MailApp.sendEmail(mail, "Stock report of today", "The XLSX file is attached", {attachments: [blob]});
    }
    

    如您所见,var mail 用于sendEmail(),这意味着它将使用您输入的任何电子邮件地址作为电子邮件的收件人。

    【讨论】:

    • 非常感谢您的帮助!非常新手,所以我花了一点时间才发现我需要保留 onOpen 部分的功能才能恢复我的菜单。现在一切都好。真的很感激!
    • 糟糕,可能应该保留该代码以避免混淆!如果满足您的需求,请将答案标记为正确。
    • 详见this page,答案旁边应该有一个可切换的复选标记。
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多