Javascript Google MailApp html选项有问题

Javascript Google MailApp html选项有问题,javascript,google-apps-script,Javascript,Google Apps Script,我很难设置一个脚本来遍历谷歌电子表格,并通过电子邮件向员工发送包含关于他们的报告的行 在我的测试中,电子邮件地址和主题行都是通过电子邮件发送的,但根据我的尝试,电子邮件要么是空白的,要么写着“[对象]” 我正在用Chrome浏览器浏览Gmail网站的电子邮件 HTML代码还没有任何变量。我仍在努力将其正确地发送到电子邮件,然后我将尝试使用scriplets为报告构建一个表 代码.gs function changeName() { var ss = SpreadsheetApp.getAct

我很难设置一个脚本来遍历谷歌电子表格,并通过电子邮件向员工发送包含关于他们的报告的行

在我的测试中,电子邮件地址和主题行都是通过电子邮件发送的,但根据我的尝试,电子邮件要么是空白的,要么写着“[对象]”

我正在用Chrome浏览器浏览Gmail网站的电子邮件

HTML代码还没有任何变量。我仍在努力将其正确地发送到电子邮件,然后我将尝试使用scriplets为报告构建一个表

代码.gs

function changeName() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var shA = ss.getSheets()[0];    // Report download
  var shB = ss.getSheets()[1];    // Names & email address
  var alRow = shA.getLastRow();
  var blRow = shB.getLastRow();
  var data = shA.getRange(1, 1, alRow, 14).getValues();    // Array of all employees reports
  var employees = shB.getRange(1, 1, 2, 2).getValues();    // List of employees [i][0] and email address [i][1] in Scorecard data
  for(i=0;i<employees.length;i++){
    var html = HtmlService.createTemplateFromFile('Index').evaluate();
    MailApp.sendEmail(employees[i][1], employees[i][0] + ' Scorecards Test', {htmlbody: html.getContent()});
    Logger.log(html.getContent());
  }
}
函数changeName(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var shA=ss.getSheets()[0];//报告下载
var shB=ss.getSheets()[1];//名称和电子邮件地址
var alRow=shA.getLastRow();
var blRow=shB.getLastRow();
var data=shA.getRange(1,1,alRow,14).getValues();//所有员工报告的数组
var employees=shB.getRange(1,1,2,2).getValues();//记分卡数据中员工[i][0]和电子邮件地址[i][1]的列表

对于(i=0;i以下修改如何

发件人:
函数changeName(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var shA=ss.getSheets()[0];//报告下载
var shB=ss.getSheets()[1];//名称和电子邮件地址
var alRow=shA.getLastRow();
var blRow=shB.getLastRow();
var data=shA.getRange(1,1,alRow,14).getValues();//所有员工报告的数组
var employees=shB.getRange(1,1,2,2).getValues();//记分卡数据中员工[i][0]和电子邮件地址[i][1]的列表

对于(i=0;i以下修改如何

发件人:
函数changeName(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var shA=ss.getSheets()[0];//报告下载
var shB=ss.getSheets()[1];//名称和电子邮件地址
var alRow=shA.getLastRow();
var blRow=shB.getLastRow();
var data=shA.getRange(1,1,alRow,14).getValues();//所有员工报告的数组
var employees=shB.getRange(1,1,2,2).getValues();//记分卡数据中员工[i][0]和电子邮件地址[i][1]的列表

对于(i=0;i我发现在文件中直接构建html要容易得多,如下所示:

var s='<table>';
s+='Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',data[i][0],data[i][1],data[i][2]);
s+='</table>'`;
MailApp.sendMail({to:emailAddress, subject: subj, htmlBody: s});
这样我就可以在构建日志时看到自己在做什么,而不必发送电子邮件。有些人使用日志,但我喜欢这样做

人们常常希望在发送电子邮件时附加一些条件

  • 电子邮件地址不是空的
  • 身体不是空的
  • 电子邮件尚未发送
  • 您尚未超过剩余的每日配额

  • 但是每个人都是不同的,你可以选择任何让你高兴的方式去做。

    我发现在文件中构建html要容易得多,如下所示:

    var s='<table>';
    s+='Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',data[i][0],data[i][1],data[i][2]);
    s+='</table>'`;
    MailApp.sendMail({to:emailAddress, subject: subj, htmlBody: s});
    
    这样我就可以在构建日志时看到自己在做什么,而不必发送电子邮件。有些人使用日志,但我喜欢这样做

    人们常常希望在发送电子邮件时附加一些条件

  • 电子邮件地址不是空的
  • 身体不是空的
  • 电子邮件尚未发送
  • 您尚未超过剩余的每日配额

  • 但是每个人都是不同的,你可以选择让你高兴的任何方式。

    如果我正确理解了文档,我使用的是传递电子邮件地址和主题的标准方式,而你方法会跳过它们,并使用高级选项在函数上传递电子邮件地址、主题和html。或者应该有用。我会试试你的方法,看看我能学到什么。我不知道为什么我以前试过它时它不起作用,或者为什么我发布的代码不起作用,但你的代码工作得很好。谢谢!@CRB Welcome。也谢谢你。我很高兴我能对你有用。如果我正确理解文档,我使用的是标准的传递方式电子邮件地址和subject to the function and you method跳过它们,并使用高级选项在函数上传递电子邮件地址、subject和html。两者都可以。我将尝试you method,看看我能学到什么。我不确定我是否理解为什么我以前尝试过它时它不起作用,或者为什么我发布的代码不起作用,但你的代码按很好。谢谢!@CRB Welcome。也谢谢你。我很高兴我能对你有用。谢谢你的建议。这里有很多好的提示,特别是ui建议。我在代码中构建html,并在一个单独的html文件中进行构建。我之所以使用单独的文件,是因为我似乎更容易格式化html以提高可读性在html页面中。而不是必须在代码页面中分解字符串。你认为这是一个常见问题还是需要学习处理的问题?很多人使用模板文件。我不,我发现很容易将其与代码缠绕在一起,可能是因为我在开始编码之前不计划要做什么。谢谢你的建议。相当多的f这里有一些很好的提示,特别是ui建议。我在代码和单独的html文件中构建html。我之所以使用单独的文件,是因为我似乎更容易在html页面中格式化html以便于阅读。而不是在代码页面中分解字符串。你认为这是一个常见问题还是som学习如何使用模板文件?很多人都使用模板文件。我不觉得,我发现很容易将其与代码结合起来,可能是因为我在开始编码之前没有计划要做什么。
    function changeName() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var shA = ss.getSheets()[0];    // Report download
      var shB = ss.getSheets()[1];    // Names & email address
      var alRow = shA.getLastRow();
      var blRow = shB.getLastRow();
      var data = shA.getRange(1, 1, alRow, 14).getValues();    // Array of all employees reports
      var employees = shB.getRange(1, 1, 2, 2).getValues();    // List of employees [i][0] and email address [i][1] in Scorecard data
      for(i=0;i<employees.length;i++){
        var html = HtmlService.createTemplateFromFile('Index').evaluate();
        MailApp.sendEmail({
          to: employees[i][1],
          subject: employees[i][0] + ' Scorecards Test',
          htmlBody: html.getContent()
        });
        Logger.log(html.getContent());
      }
    }
    
    var s='<table>';
    s+='Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',data[i][0],data[i][1],data[i][2]);
    s+='</table>'`;
    MailApp.sendMail({to:emailAddress, subject: subj, htmlBody: s});
    
    var ui=HtmlService.createHtmlOutput(s);
    SpreadsheetApp.getUi().showModeLessDialog(ui,title);