Google apps script 发送包含电子表格数据的电子邮件

Google apps script 发送包含电子表格数据的电子邮件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我目前正在尝试编写一个应用程序脚本函数,在编辑谷歌表单时发送电子邮件。我目前的问题是,该函数只发送一列数据,我需要它同时发送库存的日期和数量。这就是我目前拥有的,我想也许我需要一个嵌套循环,以便函数打印两列。任何帮助都会很好 function sendEmails() { var sheet = SpreadsheetApp.getActiveSheet(); // Fetch the range of cells A2:B3 var dataRange = sheet.getRan

我目前正在尝试编写一个应用程序脚本函数,在编辑谷歌表单时发送电子邮件。我目前的问题是,该函数只发送一列数据,我需要它同时发送库存的日期和数量。这就是我目前拥有的,我想也许我需要一个嵌套循环,以便函数打印两列。任何帮助都会很好

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(2, 1, 4, 2);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  //var data = dataRange.getSheetValues();
  for (i in data) {
    var row = data[i];
    var message = row[1];       // Second column
    var subject = "Inventory update";
    MailApp.sendEmail("test@test.com", subject, message);
  }
}

在上述代码中,范围
“A2:B5”
中的单元格值以数组格式存储在变量数据中,即

var data = dataRange.getValues(); //This code results in the below
data = [["A2","B2"],
        ["A3","B3"],
        ["A4","B4"],
        ["A5","B5"]]
其中A2对应于单元格A2的值,B2对应于单元格B2,依此类推。要访问第一行,请执行以下操作:

data[0] => ["A2","B2"]
data[0][0] => "A2"
注意:数据[0]返回另一个包含第1行上所有元素的数组。另外,请注意编号从0开始,而不是从1开始
现在,要访问第一行的第一个元素,请执行以下操作:

data[0] => ["A2","B2"]
data[0][0] => "A2"
同样,在上面的代码中,当您这样做时

var row = data[i]; where i = 0
row => ["A2","B2"]
因此,要获得第一列,您可以这样做

row[0]  => "A2"
row[1]  => "B2"
要获得第二列,您需要执行以下操作

row[0]  => "A2"
row[1]  => "B2"
将消息变量修改为如下所示

message = message + row[0] +","+row[1]"\n"
其中,在您的中,使用逗号分隔符将新行附加到上一条消息,并添加新行提要

到目前为止,您的邮件应用程序每行发送1封电子邮件。然而,我不相信这是故意的行为。下面是您修改过的代码

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(2, 1, 4, 2);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  //var data = dataRange.getSheetValues();
  var message =""  //empty string
  //Loop through each row and form CSV data
  for (var i=0;i<data.length;i++) {  //edited because:https://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-a-bad-idea
    var row = data[i];
    message = message + row[0] +","+row[1]"\n"   
  }
  // Send one email with all the rows
  var subject = "Inventory update"; 
  MailApp.sendEmail("test@test.com", subject, message);
}
函数sendEmails(){ var sheet=SpreadsheetApp.getActiveSheet(); //获取单元格A2:B3的范围 var dataRange=sheet.getRange(2,1,4,2); //获取范围中每行的值。 var data=dataRange.getValues(); //var data=dataRange.getSheetValues(); var message=”“//空字符串 //循环遍历每行并形成CSV数据
对于(var i=0;i而言,最初的问题没有坚持使用编码解决方案。 因此,使用此Gsheet插件,您的确切用例无需代码即可完成:

查看底部的教程视频(从电子表格发送电子邮件)


这是大量重复发送到同一地址的邮件。为什么不将邮件连接起来并在最后发送?这样可以避免许多配额和速率限制问题。如果使用安装了
onEdit
的触发器调用此函数,则应传入事件对象(
sendmails
->
sendmails(e)
)并检查修改的范围(
e.range
)在相应的部分中,以避免仅仅因为修改了一些不相关的文本而不必要地向某人发送垃圾邮件。FTR,不建议使用
为…
中的…迭代
数组
。不要使用
。in.
模式迭代Javascript数组。@tehhowch您能详细说明为什么不吗?@tehhowch modified!