Google 脚本代码可在单独的电子邮件中发送 Google 表格文档的每一行

问题描述 投票:0回答:1

我对此很陌生(我有使用 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:

`

<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>
google-sheets google-apps-script
1个回答
0
投票

修改要点:

  • 在您的脚本中,在
    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。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.