亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Google App Scripts 在學生出勤表的每一行最后一行添加色帶?

如何使用 Google App Scripts 在學生出勤表的每一行最后一行添加色帶?

慕田峪9158850 2023-05-11 10:36:00
作為學生出勤系統的一部分,我想使用 App Scripts 在班級的每一行最后一行添加一個色帶以進行出勤。我的 Google 表格列是:(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');      }}});  }  }
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

解釋:

根據你的問題,我理解了以下步驟:

  1. 檢查E列中是否至少有兩個獨特的主題。一種方法是找到唯一的主題列表。如果該列表的長度是或更多,則意味著您有不同的主題。在這種情況下,語句的第一個塊的計算結果為,并且您在更改主題之前的行中添加了一條黃線。2iftrue

  2. 如果您只有一個主題,即唯一主題列表的長度,則語句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');

      }}});

  }


  }

完整的解決方案:

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"}]});

    } 

  }

     

}


查看完整回答
反對 回復 2023-05-11
  • 1 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號