0

你好,

我对 javascript、谷歌应用程序脚本和一般编码比较陌生。我目前正在使用谷歌表格 [g-sheet] 的 Google Apps 脚本 [g-script] 环境中工作。这是我要完成的工作:

  1. 使用 g-sheet 存储用于访问 w/ g-script 的数据集
  2. 使用 g-script 起草和发送电子邮件,使用 HTML 模板 [存储在代码编辑器中] 填充每个行中的唯一数据。

我有一段代码可以从工作表中获取数据。然后我有一个定义的函数来使用 for 循环发送电子邮件。在该 for 循环中,我尝试使用 HTMLService 类从文件中创建一个模板,使用每行的唯一数据填充模板数 [在本例中为 3],并将其存储为 var“htmlBody”。然后,使用 MailApp 类发送唯一创建的 HTML 模板。

我收到的错误:

当我运行代码时,我得到一个“未定义行”的参考错误。我添加了执行日志的图片。console.log(boatData[i]) 语句是一种努力解决问题的方法,是数据集中第一行记录到控制台的信息。

我该如何解决?

编码:

  var sheet = SpreadsheetApp.getActive().getSheetByName('DB.charters');
  var startRow = 3 ; 
  var numRows = 3 ;
  var dataRange = sheet.getRange(startRow,1,numRows,15);
  var boatData = dataRange.getValues();

function sendEmail() {
  for (var i in boatData) {
    var row = boatData[i] ;

    function getEmailHtml() { // gets the HTML template & makes it useable
      var htmlTemplate = HtmlService.createTemplateFromFile("emailTempWorkOrder.html"); // uses HtmlService class to create an HtmlTemplate object from the file in the code editor
  htmlTemplate.boats = boatData[i] ; //makes the var boatData avail within the template through the proeprty .boats
    console.log(boatData[i]); // logs the first row only
     var htmlBody = htmlTemplate.evaluate().getContent(); // converts the html file into raw binary content for HTTP responses
     return htmlBody;
    } // end of getEmailHtml()
 
  var htmlBody = getEmailHtml();
  
  MailApp.sendEmail({ // Sends the email formatted
    to: "bmsbreaux@gmail.com",
    subject: `Vessel Charter: ${row[1]} -`, // ${row[3]} [Client] [Date @ Time]
    htmlBody: htmlBody,

  }); // end of MailApp action
  } // end of for-loop
} // end of sendEmail()

// Confirmation statement.
console.log('Ran sendEmailWorkOrder(), sent emails');
4

1 回答 1

1

我刚刚运行了您的代码,它运行良好,没有错误;但如果我是你,我会让我的代码像这样,它也可以工作。

function sendEmail() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('DB.charters');
  const boatData = sheet.getRange(3,1,3,15).getValues();
  let htmlBody = HtmlService.createHtmlOutputFromFile("emailTempWorkOrder.html").getContent();

  for (var i in boatData) {
    var row = boatData[i] ;

    htmlBody = htmlBody.replace('{boat}',boatData[i]);
  MailApp.sendEmail({ // Sends the email formatted
    to: "bmsbreaux@gmail.com",
    subject: `Vessel Charter: ${row[1]} -`, // ${row[3]} [Client] [Date @ Time]
    htmlBody: htmlBody,

  }); // end of MailApp action
  } // end of for-loop
} // end of sendEmail()

// Confirmation statement.
console.log('Ran sendEmailWorkOrder(), sent emails');

以下是html文件:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    {boat}
  </body>
</html>
于 2021-07-28T04:03:56.373 回答