Skip to content

Instantly share code, notes, and snippets.

@phillypb
Last active December 31, 2018 14:03
Show Gist options
  • Save phillypb/187700cd515a2abbc6452dccce92d13e to your computer and use it in GitHub Desktop.
Save phillypb/187700cd515a2abbc6452dccce92d13e to your computer and use it in GitHub Desktop.
function createGroupSheets() {
// get relevant Sheets
var ss = SpreadsheetApp.getActiveSpreadsheet();
var studentSheet = ss.getSheetByName('Students');
var studentSheetName = studentSheet.getSheetName();
var studentSheetValues = studentSheet.getDataRange().getValues();
var studentLastRow = studentSheet.getLastRow();
var groupSheet = ss.getSheetByName('Groups');
var groupSheetValues = groupSheet.getDataRange().getValues();
var groupLastRow = groupSheet.getLastRow();
var configSheetValues = ss.getSheetByName('Config').getDataRange().getValues();
Logger.log('Feedback Folder ID is ' + configSheetValues[1][1]);
Logger.log('Feedback Sheet Template ID is ' + configSheetValues[2][1]);
// get relevant File/Folder
var sheetTemplate = DriveApp.getFileById(configSheetValues[2][1]);
var folderTemplate = DriveApp.getFolderById(configSheetValues[1][1]);
ss.toast('Creating Group Sheets');
// loop through each Group ID ************************************************************************************
for (var i=1;i<groupLastRow;i++) {
// get Group ID
var groupID = groupSheetValues[i][0];
// get Group File Link (should be blank)
var groupFileLink = groupSheetValues[i][3];
// check Group ID not blank and Group File Link is (otherwise file may already exist)
if (groupID != '' && groupFileLink == '') {
Logger.log('Group ID is ' + groupID);
// copy Template Sheet for new Group
var sheetName = groupID + ': Student Feedback' + ' - ' + configSheetValues[3][1];
var templateCopy = sheetTemplate.makeCopy(sheetName, folderTemplate);
var templateCopyURL = templateCopy.getUrl();
// write Sheet URL to Groups sheet
groupSheet.getRange(i+1, 4).setFormula('=HYPERLINK("' + templateCopyURL + '","' + sheetName + '")');
// loop through each student looking for Group ID *************************************************************
var students = [] // create empty array to push student details into
for (var j=1;j<studentLastRow;j++) {
if (studentSheetValues[j][3] == groupID) { // check Students "Group ID" column matches
var studentName = studentSheetValues[j][1] + ' ' + studentSheetValues[j][2]; // concatenate first+last name
students.push(studentName); // add details to array
var studentEmail = studentSheetValues[j][0];
students.push(studentEmail);
}
} // end of loop through each student looking for Group ID ****************************************************
// open newly created Sheet to add relevant details
var newSheet = SpreadsheetApp.openByUrl(templateCopyURL).getSheetByName('Group Feedback');
// loop through each student in array and append details to new Sheet *****************************************
for (var k=0;k<students.length;k+=2) {
var lastRow = newSheet.getLastRow();
newSheet.getRange(lastRow+1, 1).setValue(students[k+1]); // append to last row
newSheet.getRange(lastRow+1, 2).setValue(students[k]);
} // end of loop through each student in array and append details to new Sheet ********************************
ss.toast('Group Sheet made for ' + groupID);
} // end of check Group ID not blank and Group File Link is (otherwise file may already exist)
else {
Logger.log('Group ID is blank or Group File Link may not be');
}
} // end of loop through each Group ID ****************************************************************************
ss.toast('Task completed');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment