我目前正在尝试编写一个Apps脚本功能,可以在编辑Google表格时发送电子邮件。我目前的问题是该功能只发送一列数据,我需要它发送库存的日期和数量。这就是我现在所拥有的,我想我可能需要一个嵌套循环才能使函数打印两列。任何帮助都会很棒!
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);
}
}
答案 0 :(得分:1)
在上面的代码中,来自范围"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]返回另一个包含第1行所有元素的数组。另外,请注意编号从0开始而不是从1开始 现在要访问第一行的第一个元素,您将执行以下操作:
data[0][0] => "A2"
上面的代码与你的代码相似
var row = data[i]; where i = 0
row => ["A2","B2"]
因此,要获得第一列,你会做
row[0] => "A2"
获取你要做的第二列
row[1] => "B2"
修改您的消息变量,使其如下所示
message = message + row[0] +","+row[1]"\n"
使用逗号分隔符和\n
新换行符将新行添加到上一封邮件的位置。
截至目前,您的邮件应用每行发送一封电子邮件。但是,我不相信这是预期的行为。以下是您修改后的代码
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);
}
答案 1 :(得分:0)
最初的问题不是坚持采用编码解决方案。 因此,使用此Gsheet插件,无需代码即可完成您的确切用例:
请参阅底部的教程视频(从电子表格发送电子邮件)