Google Sheets Script Apps - 所选学生的电子邮件花名册,格式问题

Google Sheets Script Apps-Email roster of selected students, formatting issue

我已经为我们的教练创建了一个电子表格。他们选择了一项运动,然后在电子表格中填满了可能的学生名册。他们单击参加活动的学生姓名旁边的复选框,键入日期,然后单击发送按钮。它向列出的教师发送一封电子邮件(第二个选项卡包含所有花名册和电子邮件)。我写的脚本做这一切没问题。我遇到的问题涉及格式化。名称以逗号分隔水平打印出来:

学生一、学生二(等)

[这是原来的 post,但我想出了如何跳过数组中的空白点 如果跳过花名册中的学生,打印输出如下所示:

学生一、学生三、学生四、学生六(等)]

如果未选中该复选框,我不希望打印名称,但我希望电子邮件的打印输出看起来更清晰一些。 我使用一个数组来读取名称,我意识到它只是打印出数组并且它有一个空框。 (解决了空名部分) 我希望电子邮件看起来像:

学生一

学生二

我不确定如何完成这个并且已经搜索了很多。我拥有的是功能性的,但看起来不太好。另一个循环可以完成这个,但我不知道如何在格式化电子邮件的同时做到这一点。当我尝试在里面放一个循环时,它绝对不喜欢。

这是电子表格:Sample Sports Email Spreadsheet

这是我输入的代码:

function emailRoster() 
{
  var teacher = SpreadsheetApp.getActive().getRange("Rosters!J2:J4").getValues();
  var roster = SpreadsheetApp.getActive().getRange("Sheet1!A6:B").getValues();
  var sport = SpreadsheetApp.getActive().getRangeByName("Sport").getValue();
  var date = SpreadsheetApp.getActive().getRangeByName("Date").getValue();
  var lenT = teacher.length;
  var lenR = roster.length;
  var playerTrue = [];
  
  for(var i=0; i<lenR; i++){
      if(roster[i][1])
      playerTrue[i] = roster[i][0];
      
    }
    playerTrue = playerTrue.filter(String); //recently added...fixed the printout so it ignores blank parts of the array
    playerTrue.forEach(function(name) {
          Logger.log(name);
         
      });
   
  for(var p=0; p<lenT-1; p++){
     

    var email = teacher[p];
    var subject = "Students out for " + sport;
    var body = "Teachers,\nThe following students will be out for " +sport+ " on " +date +": \n\n" + playerTrue +"\n";
   
    
    GmailApp.sendEmail(email,subject,body);
  }
};

编辑

我已经创建了另一个函数来尝试将其获取到 return 每个名字后面有一个 return,但我只能让它做名字:

function createRoster(){
  var roster = SpreadsheetApp.getActive().getRange("Sheet1!A6:B").getValues();
  var playerTrue = [];
  var lenR=roster.length;
  
  for(var i=0; i<lenR; i++){
      if(roster[i][1])
      playerTrue[i] = roster[i][0];    }
    playerTrue = playerTrue.filter(String);
  Logger.log(playerTrue);
  for(var b=0; b<lenR-1; b++){
    return playerTrue[b] + "\n";
   
  }
   Logger.log(playerTrue);
 };

所以现在原函数中的body变量是这样的:

var body = "Teachers,\nThe following students will be out for " +sport+ " on " +date +": \n\n" + createRoster() +"\n";

从您的显示脚本来看,playerTrue 似乎是一个数组。当直接使用数组作为正文时,就会出现这样的情况。当你想将值对齐到垂直方向时,下面的修改使用join如何?

发件人:

var body = "Teachers,\nThe following students will be out for " +sport+ " on " +date +": \n\n" + playerTrue +"\n";

收件人:

var body = "Teachers,\nThe following students will be out for " + sport + " on " + date + ": \n\n" + playerTrue.join("\n") + "\n";

或者,当你想每2行放一个值时,下面的修改怎么样?

var body = "Teachers,\nThe following students will be out for " + sport + " on " + date + ": \n\n" + playerTrue.join("\n\n") + "\n";

参考: