首页 > 解决方案 > 如果单元格匹配今天的日期,如何通过电子邮件发送几行谷歌工作表

问题描述

每天我必须通过电子邮件向几个收件人发送不同数量的谷歌工作表行(这取决于离开了多少辆卡车)。

如果单元格与今天的日期匹配,请您帮我举个例子,说明如何收集几行谷歌表格,然后通过电子邮件发送?

例如,我需要获取包含今天日期的所有行,并通过电子邮件从 A、B、C、E 列发送数据。

提前感谢您的帮助:)

标签: google-apps-scriptgoogle-sheetsgmail

解决方案


让我们一步一步来。我假设 A 列包含日期。如果不正确,请更改它:

  1. 声明我们将用于此的变量
function main() {  
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = sheet.getActiveSheet();
  var row_count = sheet.getLastRow() - 1;  
  var today = Utilities.formatDate(new Date(), "UTC", "dd.MM.yyyy"); //You can use the date format you prefer
  var data = sheet.getRange("A2:E"+ (row_count + 1)).getValues(); //We get all the values from A to E and from row 2 to the last one.

  countToday(sheet, today, row_count, data);
  sendEmails(data);


}
  1. 由于我们在数据的每个位置都有每一行,因此我们会将每个日期与“今天”进行比较,并且我们将从其他日期删除(拼接)这些行。具有有效日期的行将保留在变量中:
function countToday(sheet,today, row, data){

  var lastrow = "A" + (row + 1);
  var col_A = sheet.getRange('A2:'+lastrow).getValues();


  for (var i = row; i >= 0; i--){
    if (col_A[i] != today){
      data.splice(i, 1); //
    }

  }

}
  1. 现在我们得到了每一行元素,我们可以发送电子邮件了。我们将创建一个 html 表,以便更容易理解。Mailapp 函数使它变得非常简单:

function sendEmails(data){

 MailApp.sendEmail({
    to: "example1@mail.com" + "example2@mail.com", //You can put as many emails you want
    subject: "Example",
    htmlBody:"<html><body>" + createTable(data)+ "</body></html>"});

}
  1. 要创建 html 表,我们只需使用工作表中的列名创建一个用 html 编码的字符串。然后我们创建一个表格数组,我们将在其中拆分每个元素,data用逗号分隔(即每个工作表单元格)并将其添加到变量的末尾。</td> 将为我们创建行。
function createTable(data){
  var cells = [];

  var table = "<html><body><br><table border=1><tr><th>Date</th><th>Column B</th><th>Column C</th><th>Column D</th><th>Column E</tr></br>";

  for (var i = 0; i < data.length; i++){
      cells = data[i].toString().split(",");
      table = table + "<tr></tr>";

      for (var u = 0; u < cells.length; u++){
          table = table + "<td>"+ cells[u] +"</td>";
      }
  }

  table=table+"</table></body></html>";
  return table;
}

推荐阅读