我对此很陌生(我有使用 VBA 的经验,但这略有不同)。我想就下面的脚本寻求帮助。我想通过每行单独的电子邮件发送 Google 表格中的每一行。我将列名定义为变量,以便能够构建 html 正文中的数据。 我尝试构建一个循环来遍历行并在每个周期中发送设计的电子邮件,直到到达最后使用的行。 电子邮件已发送,但电子邮件主题为“NaN”,并且收到的电子邮件正文中包含“[object Object]”。我也不确定循环是否正常工作,因为我收到的电子邮件数量多于使用的行数。 如果有任何建议,我将不胜感激。
提前谢谢您!
亲切的问候, 彼得
我就卡在这个水平了:(
//access Google Sheets
var wb=SpreadsheetApp.getActiveSpreadsheet();
var sheet=wb.getSheetByName("automail");
// access the data in a variable
var data=sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn());
var lastline = sheet.getLastRow();
for (var i=1;i=lastline;i++){
//define the data points as per the data
var takidatum =data[i,1];
var sorrend=data[i,2];
var takarito=data[i,3];
var lakaskod=data[i,4];
var vendegszam=data[i,5];
var befejezes=data[i,6];
var erkezes=data[i,7];
var munkajellege=data[i,8];
var komment=data[i,9];
var cim=data[i,10];
var emeletajto=data[i,11];
var kapukod=data[i,12];
var kulcsdoboz=data[i,13];
//mail to
var adressee=['[email protected]'];
//create template object for dynamic HTML contstructing
var htmlTemplate=HtmlService.createTemplateFromFile('email.html');
//define html vars as per column name to make cell content available for html reference
htmlTemplate.takidatum=takidatum;
htmlTemplate.sorrend=sorrend;
htmlTemplate.takarito=takarito;
htmlTemplate.lakaskod=lakaskod;
htmlTemplate.vendegszam=vendegszam;
htmlTemplate.befejezes=befejezes;
htmlTemplate.erkezes=erkezes;
htmlTemplate.munkajellege=munkajellege;
htmlTemplate.komment=komment;
htmlTemplate.cim=cim;
htmlTemplate.emeletajto=emeletajto;
htmlTemplate.kapukod=kapukod;
htmlTemplate.kulcsdoboz=kulcsdoboz;
//evaluate the template and returns an html output object
var htmlforemail=htmlTemplate.evaluate().getContent();
//send email
//GmailApp.sendEmail(
//adressee,
//takidatum + lakaskod + takarito,
//{htmlBody: htmlforemail});
GmailApp.sendEmail(
adressee,
takidatum + lakaskod + takarito,
{htmlBody: htmlforemail});
}
}
`
<html>
<head>
<base target="_top">
</head>
<body>
<UL>
<li>Dátum : <?=takidatum?></li>
<li>Lakáskód : <?=lakaskod?></li>
<li>Takaritó : <?=takarito?></li>
<li>Munka jellege : <?=munkajellege?></li>
<li>sorrend : <?=sorrend?></li>
<li>Érkező vendégek száma : <?=vendegszam?></li>
<li>Mikorra kell befejezni? : <?=befejezes?></li>
<li> Mikor kezdhető a takarítás? : <?=erkezes?></li>
<li>Komment : <?=komment?></li>
<li>Cím : <?=cim?></li>
<li>Emelet/ajtó infó : <?=emeletajto?></li>
<li>Kapukód : <?=kapukod?></li>
<li>Kulcsdoboz kód : <?=kulcsdoboz?></li>
</UL>
</body>
</html>
for (var i = 1; i = lastline; i++) {
处,i
始终是 i = lastline
的值,并且 for 循环尚未完成。data
是一个 Class Range 对象。在这种情况下,不能像data[i]
那样使用。data[i, 1]
可能是data[i][0]
?对于数组,第一个索引是 0。不幸的是,我无法从你的问题中了解你的实际情况。您的电子表格有第一个标题行吗?如果是这样,初始值为 var i = 1
。GmailApp.sendEmail(adressee, takidatum + lakaskod + takarito, {htmlBody: htmlforemail});
的情况下,第三个参数必须是文本主体。但是,您使用 JSON 对象。我认为这就是您当前问题"[object Object]" is in the received email's body
的原因。当这些要点反映在你的脚本中时,就会变成如下所示。
function myFunction() {
var wb = SpreadsheetApp.getActiveSpreadsheet();
var sheet = wb.getSheetByName("automail");
var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getDisplayValues();
for (var i = 1; i < data.length; i++) {
var takidatum = data[i][0];
var sorrend = data[i][1];
var takarito = data[i][2];
var lakaskod = data[i][3];
var vendegszam = data[i][4];
var befejezes = data[i][5];
var erkezes = data[i][6];
var munkajellege = data[i][7];
var komment = data[i][8];
var cim = data[i][9];
var emeletajto = data[i][10];
var kapukod = data[i][11];
var kulcsdoboz = data[i][12];
var adressee = '[email protected]';
var htmlTemplate = HtmlService.createTemplateFromFile('email.html');
htmlTemplate.takidatum = takidatum;
htmlTemplate.sorrend = sorrend;
htmlTemplate.takarito = takarito;
htmlTemplate.lakaskod = lakaskod;
htmlTemplate.vendegszam = vendegszam;
htmlTemplate.befejezes = befejezes;
htmlTemplate.erkezes = erkezes;
htmlTemplate.munkajellege = munkajellege;
htmlTemplate.komment = komment;
htmlTemplate.cim = cim;
htmlTemplate.emeletajto = emeletajto;
htmlTemplate.kapukod = kapukod;
htmlTemplate.kulcsdoboz = kulcsdoboz;
var htmlforemail = htmlTemplate.evaluate().getContent();
GmailApp.sendEmail(adressee, takidatum + lakaskod + takarito, "", { htmlBody: htmlforemail });
}
}
for (var i = 1; i < data.length; i++) {
修改为for (var i = 0; i < data.length; i++) {
。data[i,1]
是第二列,请将data[i][0]
修改为data[i][1]
。并且,请在其后的每个索引中添加 1。