Javascript 如何使用谷歌应用程序脚本在学生考勤表的每一行添加颜色条纹?
作为学生出勤系统的一部分,我想使用应用程序脚本在每一节课的最后一行添加一个色带,以便出勤。我的谷歌表单列有:(i)日期,(ii)电子邮件,(iii)纬度,(iv)经度,(v)主题代码。尝试了许多方法,但没有找到解决办法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
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"}]});
}
}
}