【问题标题】:Copying only non-empty cells into the HTML object which is being sent vie e-mail仅将非空单元格复制到通过电子邮件发送的 HTML 对象中
【发布时间】:2019-05-29 15:26:27
【问题描述】:

我有一个脚本,可以将 Google 表格中的表格复制到每天自动发送的电子邮件中(有一个触发器)。表格总是从单元格 K1 开始,总是有 6 列,但是,行数总是不同的。我想解释它并使其具有动态性。这是谷歌脚本:

function CheckShare() {
  // Fetch the monthly sales
  var Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getRange("I2"); 
  var result = Range.getValue();
  var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getRange("K1:P10").getValues();


  var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;'

  var htmltable = '<table ' + TABLEFORMAT +' ">';

for (row = 0; row<data.length; row++){

htmltable += '<tr>';

for (col = 0 ;col<data[row].length; col++){
  if (data[row][col] === "" || 0) {htmltable += '<td>' + 'None' + '</td>';} 
  else
    if (row === 0)  {
      htmltable += '<th>' + data[row][col] + '</th>';
    }

  else {htmltable += '<td>' + data[row][col] + '</td>';}
}

     htmltable += '</tr>';
}

     htmltable += '</table>';
     Logger.log(data);
     Logger.log(htmltable);
  // Check totals sales
  if (result >0){
    // Fetch the email address
      var emailAddress = "reports@gmail.com";
    // Send Alert Email.
    var message = 'There are ' + result +' deviating metrics: https://docs.google.com/spreadsheets/d/1AQEBTt919TIu92Gb9TeZRD3KpSm3L_WCHgTOmw/edit#gid=1525731698'
    + ' See the dashboard here: <link> ';
    var subject = 'Transaction Monitoring Alert: AA Share';
    MailApp.sendEmail(emailAddress, subject, message, {htmlBody:htmltable});
    }
}

当前的电子邮件输出如下所示:

我希望它排除值为“无”(空单元格)的行

【问题讨论】:

    标签: google-apps-script google-sheets gmail-api


    【解决方案1】:

    使用.getDataRange() 而不是.getRange("K1:P10"),这应该只返回包含实际数据的行。

    var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getDataRange().getValues();
    

    编辑:

    由于您无法使用.getDataRange() 来实现您的目标。尝试使用.getLastRow(),然后将其传递给您的getRange()。下面的代码应该得到 K1:Px 的范围(x = 你有多少行数据)。

    var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share");
    var lastRow = dataSheet.getLastRow();
    var data = dataSheet.getRange(1, 11, lastRow, 6).getValues();
    

    【讨论】:

    • 嘿@ross,感谢您的建议,但问题是 A:F 列中还有其他数据,例如,我不想包含在电子邮件中。我只想包含 K:P 列中的数据。
    • 不用担心 - 你是对的 getDataRange() 如果您在其他列中有数据,则会获得太多数据。我已经编辑了我的答案,并包含了一个使用 getLastRow() 的解决方案,看看是否对你有帮助。
    • 嘿@ross,不幸的是这也没有帮助。例如,如果 A:F 列中的表有 10 行,则此脚本也会从 K:P 列中获取 10 行,即使可能仅在 K:P 列的前 4 行中存在数据。
    • 嘿@ross,我刚刚成功了。基本上我使用了您的代码,但我只是将要在电子邮件中发送的表格移动到单独的选项卡。非常感谢!
    • 太棒了!我一直在努力寻找一种方法来过滤掉所有空值,但这也有效。真是一种解脱。
    猜你喜欢
    • 2013-01-20
    • 2016-03-10
    • 2021-06-28
    • 2014-02-12
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多