Javascript 如何使用谷歌应用程序脚本在学生考勤表的每一行添加颜色条纹?

Javascript 如何使用谷歌应用程序脚本在学生考勤表的每一行添加颜色条纹?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,作为学生出勤系统的一部分,我想使用应用程序脚本在每一节课的最后一行添加一个色带,以便出勤。我的谷歌表单列有:(i)日期,(ii)电子邮件,(iii)纬度,(iv)经度,(v)主题代码。尝试了许多方法,但没有找到解决办法 var sss = SpreadsheetApp.getActiveSpreadsheet(); var ssID = sss.getId(); var sheetName = sss.getName(); var sheet = sss.getSheetByN

作为学生出勤系统的一部分,我想使用应用程序脚本在每一节课的最后一行添加一个色带,以便出勤。我的谷歌表单列有:(i)日期,(ii)电子邮件,(iii)纬度,(iv)经度,(v)主题代码。尝试了许多方法,但没有找到解决办法

  var sss = SpreadsheetApp.getActiveSpreadsheet();
  var ssID = sss.getId();
  var sheetName = sss.getName(); 
  var sheet = sss.getSheetByName("TempDataSet");
  var sheet1 = sss.insertSheet('TempDataSet_temp');
  sheet.getDataRange().copyTo(sheet1.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  sheet.getDataRange().copyTo(sheet1.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);

  
  var shID = sheet1.getSheetId().toString();
  sheet1.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 1, ascending: false}); 
  var columns_delete = [7,2]; //[7,5,4,2];
  columns_delete.forEach(col=>sheet1.deleteColumn(col));

  //const sss = SpreadsheetApp.getActiveSpreadsheet();
  //const sheet = sss.getSheetByName("TempDataSet");
  
  const subs = sheet.getRange('F2:F'+sheet.getLastRow()).getValues().flat();
  const usubs = subs.filter((value, index, self)=>self.indexOf(value) === index);
  const dts = sheet.getRange('A2:A'+sheet.getLastRow()).getDisplayValues().flat();
  const udts = dts.filter((value, index, self)=>self.indexOf(value) === index);
  
  if(usubs.length>1){
    subs.forEach((s,i)=>{
    if(i>1){
      if(subs[i]!=subs[i-1]){
        sheet.getRange(i+1,1,1,5).setBackground('yellow');
      }}});
  }
  else if (udts.length>1){
    dts.forEach((d,i)=>{
    if(i>1){
      if(dts[i]!=dts[i-1]){
        sheet.getRange(i+1,1,1,5).setBackground('yellow');
      }}});
  }
 
  var from = Session.getActiveUser().getEmail();
  var subject = 'Batch Attendance Record for Your Reference';
  var body = 'Dear Student,'+ '\n\n' + 'Greetings! Please find the batch attendance record attached. Stay safe and blessed.' + '\n\n' + 'Thank you.';
  
  var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};  
  var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx&id="+ssID+"&gid="+shID;

  var result = UrlFetchApp.fetch(url , requestData);  
  var contents = result.getContent();
  sss.deleteSheet(sss.getSheetByName('TempDataSet_temp'));   
  
  var sheet2 = sss.getSheetByName('StudentList');  
  var data = sheet2.getLastRow();
  var students = [];
  var students = sheet2.getRange(2, 6, data).getValues(); 
  //MailApp.sendEmail(students.toString(), subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"MICROSOFT_EXCEL"}]});
    
  for (var i=0; i<students.length; i++){ // you are looping through rows and selecting the 1st and only column index
    if (students[i][0] !== ''){           
      MailApp.sendEmail(students[i][0].toString(), subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"MICROSOFT_EXCEL"}]}); 
      //MailApp.sendEmail(students[i][0].toString(), subject ,body, {from: from, attachments:[{fileName:"YourAttendaceRecord.xlsx", content:contents, mimeType:"MICROSOFT_EXCEL"}]});
    } 
  }
var sss=SpreadsheetApp.getActiveSpreadsheet();
var ssID=sss.getId();
var sheetName=sss.getName();
var sheet=sss.getSheetByName(“TempDataSet”);
var sheet1=sss.insertSheet('TempDataSet_temp');
sheet.getDataRange().copyTo(sheet1.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_值,false);
sheet.getDataRange().copyTo(sheet1.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_格式,false);
var shID=sheet1.getSheetId().toString();
sheet1.getRange(2,1,sheet.getLastRow()-1,sheet.getLastColumn()).sort({column:1,升序:false});
var列_delete=[7,2]//[7,5,4,2];
columns_delete.forEach(col=>sheet1.deleteColumn(col));
//const sss=SpreadsheetApp.getActiveSpreadsheet();
//const sheet=sss.getSheetByName(“TempDataSet”);
const subs=sheet.getRange('F2:F'+sheet.getLastRow()).getValues().flat();
常量usubs=subs.filter((值,索引,self)=>self.indexOf(值)==index);
常量dts=sheet.getRange('A2:A'+sheet.getLastRow()).getDisplayValues().flat();
const udts=dts.filter((值,索引,self)=>self.indexOf(值)==index);
如果(通常长度大于1){
子forEach((s,i)=>{
如果(i>1){
if(subs[i]!=subs[i-1]){
表1.getRange(i+1,1,1,5).立根背景(“黄色”);
}}});
}
否则如果(自定义长度>1){
dts.forEach((d,i)=>{
如果(i>1){
如果(dts[i]!=dts[i-1]){
表1.getRange(i+1,1,1,5).立根背景(“黄色”);
}}});
}
var from=Session.getActiveUser().getEmail();
var subject=‘批量考勤记录供您参考’;
var body='亲爱的学生,'+'\n\n'+'您好!请查看随附的批量考勤记录。保持安全和幸福。'+'\n\n'+'谢谢';
var requestData={“方法”:“获取”,“头”:{“授权”:“承载者”+ScriptApp.getOAuthToken()};
变量url=”https://docs.google.com/spreadsheets/d/“+ssID+”/export?format=xlsx&id=“+ssID+”&gid=“+shID;
var result=UrlFetchApp.fetch(url,requestData);
var contents=result.getContent();
sss.deleteSheet(sss.getSheetByName('TempDataSet_temp');
var sheet2=sss.getSheetByName('StudentList');
var data=sheet2.getLastRow();
var学生=[];
var students=sheet2.getRange(2,6,data).getValues();
//MailApp.sendmail(students.toString(),主题,正文,{附件:[{fileName:sheetName+“.xlsx”,content:contents,mimeType:“MICROSOFT_EXCEL”}]});
对于(变量i=0;i解释:
根据您的问题,我了解以下步骤:

  • 检查E中是否至少有两个唯一的主题。一种方法是查找唯一的主题列表。如果该列表的长度为
    2
    或更多,则表示您有不同的主题。在这种情况下,
    if
    语句的第一个块计算结果为
    true
    并且在更改主题之前在行中添加一条黄线

  • 如果只有一个主题,即唯一主题列表的长度为
    1
    If
    语句的第一块将计算为
    false
    。在这种情况下,脚本将检查列A是否有
    2
    或更多唯一日期。如果有,则第二块将执行
    if
    语句,脚本将在更改日期之前在行中添加一条黄线。否则,它将不会执行任何操作


  • 解决方案: 您可以作为独立脚本执行
    color()
    。我建议您将此函数保存在新的
    .gs
    文件中,然后在当前脚本中调用它。也就是说,将
    color()
    放在您提供的代码段中所需的任何位置

    function color() {
      const sss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = sss.getSheetByName("TempDataSet");
      
      const subs = sheet.getRange('E2:E'+sheet.getLastRow()).getValues().flat();
      const usubs = subs.filter((value, index, self)=>self.indexOf(value) === index);
      const dts = sheet.getRange('A2:A'+sheet.getLastRow()).getDisplayValues().flat();
      const udts = dts.filter((value, index, self)=>self.indexOf(value) === index);
      
      if(usubs.length>1){
        subs.forEach((s,i)=>{
        if(i>1){
          if(subs[i]!=subs[i-1]){
            sheet.getRange(i+1,1,1,5).setBackground('yellow');
          }}});
      }
      else if (udts.length>1){
        dts.forEach((d,i)=>{
        if(i>1){
          if(dts[i]!=dts[i-1]){
            sheet.getRange(i+1,1,1,5).setBackground('yellow');
          }}});
      }
    
      }
    
    完整解决方案:
    函数sendEmails(){
    var sss=SpreadsheetApp.getActiveSpreadsheet();
    var ssID=sss.getId();
    var sheetName=sss.getName();
    var sheet=sss.getSheetByName(“TempDataSet”);
    var sheet1=sss.insertSheet('TempDataSet_temp');
    sheet.getDataRange().copyTo(sheet1.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_值,false);
    sheet.getDataRange().copyTo(sheet1.getActiveRange(),SpreadsheetApp.CopyPasteType.PASTE_格式,false);
    var shID=sheet1.getSheetId().toString();
    sheet1.getRange(2,1,sheet.getLastRow()-1,sheet.getLastColumn()).sort({column:1,升序:true});
    变量列_delete=[7,2];//[7,5,4,2];
    columns_delete.forEach(col=>sheet1.deleteColumn(col));
    SpreadsheetApp.flush();
    const subs=sheet1.getRange('E2:E'+sheet1.getLastRow()).getValues().flat();
    常量usubs=subs.filter((值,索引,self)=>self.indexOf(值)==index);
    常量dts=sheet1.getRange('A2:A'+sheet1.getLastRow()).getDisplayValues().flat();
    const udts=dts.filter((值,索引,self)=>self.indexOf(值)==index);
    如果(通常长度大于1){
    子forEach((s,i)=>{
    如果(i>1){
    if(subs[i]!=subs[i-1]){
    表1.getRange(i+1,1,1,5).立根背景(“黄色”);
    }}});
    }
    否则如果(自定义长度>1){
    dts.forEach((d,i)=>{
    如果(i>1){
    如果(dts[i]!=dts[i-1]){
    表1.getRange(i+1,1,1,5).立根背景(“黄色”);
    }}});
    }
    SpreadsheetApp.flush();
    var from=Session.getActiveUser().getEmail();
    var subject=‘批量考勤记录供您参考’;
    var body='亲爱的学生,'+'\n\n'+'您好!请查看随附的成批出勤记录。祝您平安。'+'\n\n'+'谢谢';
    var requestData={“方法”:“获取”,“标题”:{“授权”:“承载者”+ScriptApp.ge
    
    function sendEmails(){  
    
      
      var sss = SpreadsheetApp.getActiveSpreadsheet();
      var ssID = sss.getId();
      var sheetName = sss.getName(); 
      var sheet = sss.getSheetByName("TempDataSet");
      var sheet1 = sss.insertSheet('TempDataSet_temp');
      sheet.getDataRange().copyTo(sheet1.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
      sheet.getDataRange().copyTo(sheet1.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
    
      var shID = sheet1.getSheetId().toString();
      sheet1.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 1, ascending: true}); 
      var columns_delete = [7,2]; //[7,5,4,2];
      columns_delete.forEach(col=>sheet1.deleteColumn(col));
      SpreadsheetApp.flush();
      
     const subs = sheet1.getRange('E2:E'+sheet1.getLastRow()).getValues().flat();
      const usubs = subs.filter((value, index, self)=>self.indexOf(value) === index);
      const dts = sheet1.getRange('A2:A'+sheet1.getLastRow()).getDisplayValues().flat();
      const udts = dts.filter((value, index, self)=>self.indexOf(value) === index);
      
      if(usubs.length>1){
        subs.forEach((s,i)=>{
        if(i>1){
          if(subs[i]!=subs[i-1]){
            sheet1.getRange(i+1,1,1,5).setBackground('yellow');
          }}});
      }
      else if (udts.length>1){
        dts.forEach((d,i)=>{
        if(i>1){
          if(dts[i]!=dts[i-1]){
            sheet1.getRange(i+1,1,1,5).setBackground('yellow');
          }}});
      }
      SpreadsheetApp.flush();
      var from = Session.getActiveUser().getEmail();
      var subject = 'Batch Attendance Record for Your Reference';
      var body = 'Dear Student,'+ '\n\n' + 'Greetings! Please find the batch attendance record attached. Stay safe and blessed.' + '\n\n' + 'Thank you.';
      
      var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};  
      var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx&id="+ssID+"&gid="+shID;
    
      var result = UrlFetchApp.fetch(url , requestData);  
      var contents = result.getContent();
      sss.deleteSheet(sss.getSheetByName('TempDataSet_temp'));   
      
      var sheet2 = sss.getSheetByName('StudentList');  
      var data = sheet2.getLastRow();
      var students = [];
      var students = sheet2.getRange(2, 6, data).getValues(); 
      //MailApp.sendEmail(students.toString(), subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"MICROSOFT_EXCEL"}]});
        
      for (var i=0; i<students.length; i++){ // you are looping through rows and selecting the 1st and only column index
        if (students[i][0] !== ''){           
          MailApp.sendEmail(students[i][0].toString(), subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"MICROSOFT_EXCEL"}]}); 
          //MailApp.sendEmail(students[i][0].toString(), subject ,body, {from: from, attachments:[{fileName:"YourAttendaceRecord.xlsx", content:contents, mimeType:"MICROSOFT_EXCEL"}]});
        } 
      }
         
    }