这里的初学者-读过许多类似的问题,但不知道我需要什么。非常感谢您的指导!
我有一个谷歌表与4个标签。表1是摘要表,可以忽略。表2-4有我想在电子邮件中发送的电子邮件地址和其他信息的列表。下面是我尝试的一个脚本,它循环遍历除“摘要”选项卡之外的所有工作表,并向选项卡中列出的电子邮件地址发送测试电子邮件。(注意,在表2-4中,A列显示姓名,B列显示电子邮件地址。)
下面的脚本当前抛出一个‘异常:无效的电子邮件:电子邮件(第25行,文件“代码”)错误-导致我认为我有一些问题的脚本找到我的数据在床单。
function sendEmailLoop() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(function(sheet) {
var range = sheet.getDataRange();
if (sheet.getName() == "Summary") //Disregard tab named 'Summary'
{
}
else
{
var range = sheet.getDataRange(); //to set the range as array
var values = range.getDisplayValues(); //to get the value in the array
var lastRow = range.getLastRow();
var ss = SpreadsheetApp.getActiveSpreadsheet(); //declare the spreadsheet
var sheet = ss.getSheetByName("Sheet1");
var i;
var logContent = '';
for (i = 0; i < lastRow; i++)
{
var Name = values[i][0]; //[Name] cell A++
var Email = values[i][1]; // [Email] cell B++
MailApp.sendEmail({
to: Email,
subject: Name + 'Test',
message: 'This is a test message ' + Email + Name});
}; //end for loop - email tab data
}; // end 'else'
}); // end function(sheet)
} // end SendEmailLoop() 注意-我也尝试过几个类似的循环功能,但都没有效果:
1:
var allsheets = ss.getSheets();
for (var s in allsheets){ 2:
ss = SpreadsheetApp.getActiveSpreadsheet();
for (var i = 0; i < tabs.length; i++)发布于 2020-04-21 08:08:53
答案:
您从电子邮件的工作表中检索的范围是不正确的。
更多资料:
在您提供的表格中,输入电子邮件的单元格从第4行开始,而不是从第1行开始。请参见下面的图像:

您用来遍历电子邮件的逻辑如下:
var range = sheet.getDataRange();
var values = range.getDisplayValues();
for (var i = 0; i < lastRow; i++) {
var Name = values[i][0];
var Email = values[i][1];
}但是,由于您已经获得了整个数据范围,而不仅仅是您想要的数据,从电子邮件开始,values数组也包含标题--在本例中,对象如下所示:
[[www.google.com], [], [EmpEmail], [EmpName1@blah.com], [EmpName2@blah.com]]因此,当您调用MailApp.sendEmail()并将Email指定为该数组的第一个时,当您试图向www.google.com发送电子邮件时,将得到Exception: Invalid email: Email错误。
代码修复:
幸运的是,这是一个简单的修复。由于数组中已经有数据集,所以可以更改循环的边界,从3开始,而不是从0开始。
for (i = 3; i < lastRow; i++) {
var Name = values[i][0];
var Email = values[i][1];
MailApp.sendEmail({
to: Email,
subject: Name + Title + 'Test',
message: 'This is a test message for the training that can be found at ' + URL});
}参考文献:
发布于 2020-04-13 18:30:48
我稍微重写了您的代码,它正在为我工作:
function sendEmails() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(function(sheet) {
if (sheet.getName() == "Sheet1") {
var values = sheet.getDataRange().getDisplayValues();
for (var i = 0; i < values.length; i++) {
var Name = values[i][0];
var Email = values[i][1];
MailApp.sendEmail({
to: Email,
subject: Name + ' Test',
message: 'This is a test message ' + Email + Name});
}
}
});
}我的sheet1看起来是这样的:
name1 email1@email.com
name2 email2@email.com如果仍然遇到相同的问题,工作表或电子邮件格式中的单元格格式可能是不正确的。
https://stackoverflow.com/questions/61191002
复制相似问题