Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function transposeColumns(sheetName) {
- if(sheetName == null) sheetName="students";
- // loading sheets to work with
- var ss = SpreadsheetApp.getActiveSpreadsheet();
- var printSheet = ss.getActiveSheet();
- var sheet = ss.getSheetByName(sheetName);
- // we need to know how wide and tall is the sheet
- var lastRow = sheet.getLastRow();
- var lastColumn = sheet.getLastColumn();
- /* storing data - it's basically array of arrays
- [
- [Mentor 1, student 1, student 2, student 3, ...],
- [Mentor 2, student 1, student 2, ...],
- [Mentor 3, student 1, ...]
- ]
- */
- var foundMentors = new Array();
- //set variables to loop through data, scanning begins at cell C2 (coordinates 2,3 - ROW,COLUMN)
- var activeR = 2;
- var activeC = 3;
- var step = 0
- var pushedMentors = 0;
- var studentPushed = 0;
- //loop through data on sheet
- for(var r = activeR; r <= lastRow;r++){
- for(var c = activeC; c <= lastColumn;c++){
- step++;
- var mentorName = sheet.getRange(r,c).getValue();
- Logger.log(step+' -- cell:'+r+','+c+' = '+mentorName);
- // if the cell is not empty
- if(mentorName != ''){
- // checking if mentor is unique/already found, id relates to array key
- var mentorId = findMentor(foundMentors, mentorName);
- Logger.log('mentorName: '+mentorName+': has id:'+mentorId);
- // Mentor does not yet exists
- if(mentorId === undefined){
- // adding him to array with current student
- foundMentors[pushedMentors] = new Array(mentorName, sheet.getRange(r,2).getValue());
- pushedMentors++;
- // Mentor exists, push new student name in its array
- } else {
- var newStudent = sheet.getRange(r,2).getValue();
- // checking if the student is unique in Mentors stack/array
- var studentExists = existsInArray(foundMentors[mentorId],newStudent);
- Logger.log('newStudent: '+newStudent+': exists:'+studentExists);
- // student is unique - adding him to Mentors array
- if((studentExists == false) && (newStudent !== undefined)){
- foundMentors[mentorId].push(newStudent);
- studentPushed++;
- }
- }
- }
- }
- }
- // loop for printing results (names) into current sheet
- for(var r = 0; r < foundMentors.length; r++){
- for(var c = 0; c < foundMentors[r].length; c++){
- var studentName = foundMentors[r][c];
- // acutal coordinates of cells are shifted
- printSheet.getRange(r+2, c+1).setValue(studentName);
- }
- }
- // loop for printing out generic student labels
- var printSheetlastColumn = printSheet.getLastColumn();
- for(c = 2; c <= printSheetlastColumn; c++){
- printSheet.getRange(1, c).setValue("student " +(c-1) + " name");
- }
- // printing out first cell in table
- printSheet.getRange(1, 1).setValue("mentor names");
- // searching function for existing students in mentors arrays - returns boolean
- function existsInArray(searchArray, term){
- var result = false;
- for(var i=1; i<searchArray.length; i++){
- if (searchArray[i] == term){
- result = true;
- break;
- }
- }
- return result;
- }
- // searching function for existing mentors in main array - returns undefined or key of found value
- function findMentor(searchArray, name){
- var result = undefined;
- for(var i=0; i<searchArray.length; i++){
- if (searchArray[i][0] == name){
- result = i;
- break;
- }
- }
- return result;
- }
- Logger.log(foundMentors.toString());
- Logger.log(' pushedMentors: ' +pushedMentors+ ' studentsPushed: '+studentPushed+ ' steps: '+step);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement