Javascript Double for loop在一个范围内从列中获取电子邮件并为该电子邮件组成一个表(GAS)

Javascript Double for loop在一个范围内从列中获取电子邮件并为该电子邮件组成一个表(GAS),javascript,html,for-loop,google-apps-script,google-sheets,Javascript,Html,For Loop,Google Apps Script,Google Sheets,数据基本上是这样的: 活动截止日期责任状态 活动1 2020年9月20日some@gmail.com进行中 活动2 2020年10月10日someother@gmail.com完成了 下面的代码通过责任列循环创建一组唯一的电子邮件,然后通过数据范围循环创建一个表,其中包含不同于已取消和已完成的待定活动,然后将发送到am电子邮件集中的每个电子邮件,以记住哪些活动正在等待输入/更新 尽管我将第一个负责人与第二个循环中的负责人进行了比较,但组成表的活动并没有正确地分开。 一个收件人收到他的活动,但另

数据基本上是这样的:

活动截止日期责任状态
活动1 2020年9月20日some@gmail.com进行中
活动2 2020年10月10日someother@gmail.com完成了
下面的代码通过责任列循环创建一组唯一的电子邮件,然后通过数据范围循环创建一个表,其中包含不同于已取消和已完成的待定活动,然后将发送到am电子邮件集中的每个电子邮件,以记住哪些活动正在等待输入/更新

尽管我将第一个负责人与第二个循环中的负责人进行了比较,但组成表的活动并没有正确地分开。 一个收件人收到他的活动,但另一个收件人收到所有活动,电子邮件会发送两次给后者。 下面是比较的两个循环/列的日志输出:

如果您能在这里透露一些信息,我们将不胜感激:

函数emailPendingActivity(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Atividades”);
var startRow=9;//要处理的第一行数据
var numRows=sheet.getLastRow();//要处理的行数
var dataRange=sheet.getRange(startRow,1,numRows,24);
var data=dataRange.getValues();
//这将创建历史记录表标题
var historyMsg=“”
+“悬而未决的诉讼”
+ ""
+ ""
+ ""
+“N°”
+“律师”
+“项目”
+“自然”
+“Área”
+“阿维德”
+“地位”
+“普拉佐”
+“迪亚斯·德阿特拉索”;
//这将从Atividades表中获得唯一的负责人
风险值责任=[];
对于(var j=0;j{
返回self.indexOf(值)==索引
}
var uniqueResp=责任过滤器(唯一);
对于(变量n=0;n
解决方案 您正在for循环外部实例化
historyMsg
变量。基本上,您会将每一行附加到此之前实例化的HTML表中。如果您只想将相应的值发送到正确的电子邮件地址,则无法继续附加值

您应该为每个
uniqueResp
元素实例化一个新的
historyMsg
。以便根据
if
条件构建表

拟议的修改
函数emailPendingActivity(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Atividades”);
var startRow=9;//要处理的第一行数据
var numRows=sheet.getLastRow();//要处理的行数
var dataRange=sheet.getRange(startRow,1,numRows,24);
var data=dataRange.getValues();
//将其移动到for循环中,以便为每个收件人创建唯一的消息
/**var historyMsg=“”
+“悬而未决的诉讼”
+ ""
+ ""
+ ""
+“N°”
+“律师”
+“项目”
+“自然”
+“Área”
+“阿维德”
+“地位”
+“普拉佐”
+“迪亚斯·德阿特拉索”*/
//这将从Atividades表中获得唯一的负责人
风险值责任=[];
对于(var j=0;j{
返回self.indexOf(值)==索引
}
var uniqueResp=责任过滤器(唯一);
对于(变量n=0;n
尽管我将第一个负责人与第二个循环中的负责人进行了比较,但构成表的活动没有正确分开,我可能遗漏了一些内容。请用当前输出和预期输出进行解释。只是将其添加到问题中,@TheMaster!我已经知道了。我想问的是什么
function emailPendingActivity() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Atividades");
  var startRow = 9;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 24);
  var data = dataRange.getValues();
  //Move this into the for loop so it will create a unique message for each recipient
  /**var historyMsg = "<html>"
  + "<h2 style='color:darkred;font-size:22px;font-weight:bold;'>Atividades Pendentes</h2>"
  + "<body>"
  + "<table style=\"text-align:center\">"
  + "<tr style='color:darkred;font-size:12px;'>"
  + "<th>N°</th>"
  + "<th>Solicitante</th>"
  + "<th>Projeto</th>"
  + "<th>Natureza</th>"
  + "<th>Área</th>"
  + "<th>Atividade</th>"
  + "<th>Status</th>"
  + "<th>Prazo</th>"
  + "<th>Dias de Atraso</th>";*/
  
  //This gets unique responsible people from Atividades sheet
  var responsibles = [];
  for (var j = 0; j < data.length; ++j) {
    var rowResp = data[j];
    responsibles.push(rowResp[7]);
  }
  var unique = (value,index,self) => {
    return self.indexOf(value) === index
  }
  var uniqueResp = responsibles.filter(unique);
  
  for (var n = 0; n < uniqueResp.length;++n) {
    if (uniqueResp[n] != ''){
      var respRow = uniqueResp[n];
       //This creates the history table headers
      var historyMsg = "<html>"
      + "<h2 style='color:darkred;font-size:22px;font-weight:bold;'>Atividades Pendentes</h2>"
      + "<body>"
      + "<table style=\"text-align:center\">"
      + "<tr style='color:darkred;font-size:12px;'>"
      + "<th>N°</th>"
      + "<th>Solicitante</th>"
      + "<th>Projeto</th>"
      + "<th>Natureza</th>"
      + "<th>Área</th>"
      + "<th>Atividade</th>"
      + "<th>Status</th>"
      + "<th>Prazo</th>"
      + "<th>Dias de Atraso</th>";

      for (var i = 0; i < data.length; ++i) {
...