【问题标题】:Sending multiple line email with google script ( Google Sheet )使用谷歌脚本(谷歌表)发送多行电子邮件
【发布时间】:2019-10-25 18:56:55
【问题描述】:

我是脚本界的新手。我想根据多个单元格值发送一封电子邮件。电子邮件正在工作,但有时我只发送 1 个 PO,所以我当前的代码将发送 PO1 + 9 个空行,我的电子邮件现在超长。

我认为我需要创建一个 IF 语句,但不知道从哪里开始。

function mailtest() {

  var TO = SpreadsheetApp.getActiveSheet().getRange('N3').getValue();
  var CC = SpreadsheetApp.getActiveSheet().getRange('N5').getValue();
  var SUBJECT = SpreadsheetApp.getActiveSheet().getRange('L9').getValue();
  var TEXT = SpreadsheetApp.getActiveSheet().getRange('L11').getValue();
  var TEXT2 = SpreadsheetApp.getActiveSheet().getRange('L13').getValue();
  var PO1 = SpreadsheetApp.getActiveSheet().getRange('L15').getValue();
  var PO2 = SpreadsheetApp.getActiveSheet().getRange('L16').getValue();
  var PO3 = SpreadsheetApp.getActiveSheet().getRange('L17').getValue();
  var PO4 = SpreadsheetApp.getActiveSheet().getRange('L18').getValue();
  var PO5 = SpreadsheetApp.getActiveSheet().getRange('L19').getValue();
  var PO6 = SpreadsheetApp.getActiveSheet().getRange('L20').getValues();
  var PO7 = SpreadsheetApp.getActiveSheet().getRange('L21').getValues();
  var PO8 = SpreadsheetApp.getActiveSheet().getRange('L22').getValues();
  var PO9 = SpreadsheetApp.getActiveSheet().getRange('L23').getValues();
  var P10 = SpreadsheetApp.getActiveSheet().getRange('L24').getValues();
  var signature = Gmail.Users.Settings.SendAs.list("me").sendAs.filter(function(account){if(account.isDefault){return true}})[0].signature; 
  MailApp.sendEmail({

    to: TO,
    subject: SUBJECT,
    cc: CC,
   htmlBody: 
    TEXT+"<br><br>"+

    TEXT2+"<br><br>"+
    //here is the problem ? I dont want PO3&4&5&6 if I only have 2 PO.
    PO1+"<br>"+          
    PO2+"<br>"+
    PO3+"<br>"+
    PO4+"<br>"+
    PO5+"<br>"+
    PO6+"<br>"+
    PO7+"<br>"+
    PO8+"<br>"+
    PO9+"<br>"+
    P10+"<br><br>"+
       signature


});

}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    只有当变量具有值时,您才希望在电子邮件中包含变量。 以下代码在几个方面与您的不同。

    • PO 值作为一个整体检索:sheet.getRange(15,12,10,1).getValues(); 这使得无需复杂的变量处理即可评估内容
    • 代码循环遍历值:for (var i=0; i&lt;PO.length;i++){,和
    • 评估采购订单是否有值if ( if (POValue){){
    • 如果评估结果为“是”(PO 有值),则将其添加到电子邮件文本中(POText = POText+POValue+"&lt;br&gt;");否则,该 PO 不会包含在电子邮件文本中。

    function so58564238() {
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheetname = "58564238";
      var sheet = ss.getSheetByName(sheetname);
      var POText = "";
      var PO = sheet.getRange(15,12,10,1).getValues();
      for (var i=0; i<PO.length;i++){
        var POValue = PO[i][0];
         if (POValue){
          POText = POText+POValue+"<br>"       
        }
      }
      Logger.log(POText)
    }
    

    合并邮件测试

    function mailtest() {
    
      var TO = SpreadsheetApp.getActiveSheet().getRange('N3').getValue();
      var CC = SpreadsheetApp.getActiveSheet().getRange('N5').getValue();
      var SUBJECT = SpreadsheetApp.getActiveSheet().getRange('L9').getValue();
      var TEXT = SpreadsheetApp.getActiveSheet().getRange('L11').getValue();
      var TEXT2 = SpreadsheetApp.getActiveSheet().getRange('L13').getValue();
      var POText = "";
      var PO = sheet.getRange(15,12,10,1).getValues();
      for (var i=0; i<PO.length;i++){
        var POValue = PO[i][0]
         if (POValue){
          POText = POText+POValue+"<br>"       
        }
      }
      var signature = Gmail.Users.Settings.SendAs.list("me").sendAs.filter(function(account){if(account.isDefault){return true}})[0].signature; 
      MailApp.sendEmail({
        to: TO,
        subject: SUBJECT,
        cc: CC,
        htmlBody: 
        TEXT+"<br><br>"+
        TEXT2+"<br><br>"+
        POText+"<br>"+
        signature
      });
    
    }
    

    【讨论】:

    • Ted 首先谢谢你,你的解释对我理解有很大帮助!现在我正在尝试使用您的代码,但似乎我的 for 中的 var 有语法错误(基于 google 脚本)并且变量不是蓝色的,它仍然是黑色的。我正在尝试移动东西,但我想我不知道将代码放在哪里以使我的 mailtest 功能正常工作。再次感谢您
    • 好像找不到 var PO = sheet.getRange(15,12,1,10).getValues();
    • 我的错误。我已经编辑了答案。我已将 PO 数据范围设为水平(跨第 16 行)而不是垂直(向下 L 列)。多行更改,只需复制并重新开始。
    • 我添加了第二个编辑以显示在何处以及如何合并 PO 代码。这个想法是替换所有 10 行 getValue 并插入循环例程。循环生成一个名为POText 的变量,您将其插入到sendEmail 方法中,以代替麻烦的十行“PO1+PO2+...等”。
    • Ted 再次感谢您,我确实尝试了代码,它只显示 PO 的空单元格我确实尝试更改变量,引用数字列和行的单元格瞬间......并且总是相同的结果。我确实找到了一个临时解决方案: POText 现在引用一个隐藏单元格(如 A2 ),而 A2 是一个 Concatenate 与我所有 PO 范围的 IF : =if(L15"",L15&"
      ", "") 现在它将我单元格中的
      识别为我电子邮件中的输入(返回)。我知道这是一个临时解决方案,您的解决方案更加优化,我希望尽快让它工作:) 谢谢
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多