Skip to content

Instantly share code, notes, and snippets.

@thomasweng15
Created January 8, 2018 20:12
Show Gist options
  • Save thomasweng15/2e6eb1ef4b14686c59061b650e3f35c6 to your computer and use it in GitHub Desktop.
Save thomasweng15/2e6eb1ef4b14686c59061b650e3f35c6 to your computer and use it in GitHub Desktop.
Turning column-based data in google sheets to row-based
function populatePivotTableData() {
spreadsheetId = "1AJbG6ZhqJCyU7vlb2D2d81ZG3dU5ICGkA4GPb0Xa0q8";
var ss = SpreadsheetApp.openById(spreadsheetId);
SpreadsheetApp.setActiveSpreadsheet(ss);
// Get sheet containing data
var srcSheetName = "Reordered Data";
SpreadsheetApp.setActiveSheet(ss.getSheetByName(srcSheetName));
var srcSheet = ss.getActiveSheet();
// Extract data and transpose
var images = getTransposed(srcSheet, 2, 60, 28, 24);
var prompts = getTransposed(srcSheet, 2, 60, 103, 24);
var scores = getTransposed(srcSheet, 2, 60, 128, 24);
// Get destination sheet
var dstSheetName = "Pivot Table Data";
SpreadsheetApp.setActiveSheet(ss.getSheetByName(dstSheetName));
var dstSheet = ss.getActiveSheet();
// Insert into destination sheet
insertData(dstSheet, images, 2, images.length, 2, 1);
insertData(dstSheet, prompts, 2, images.length, 4, 1);
insertData(dstSheet, scores, 2, images.length, 5, 1);
}
/*
* Insert data into specified range
*/
function insertData(sheet, array, startingRow, numRows, startingCol, numCols) {
var range = sheet.getRange(startingRow, startingCol, numRows, numCols);
var array = range.setValues(array);
}
/*
* Returns row ordered array at given range into column
*/
function getTransposed(sheet, startingRow, numRows, startingCol, numCols) {
var transposed = [];
for (var rowIdx = startingRow; rowIdx <= numRows; rowIdx++) {
var range = sheet.getRange(rowIdx, startingCol, 1, numCols);
var array = range.getValues();
transposed = transposed.concat(transpose(array));
}
return transposed;
}
/*
* Returns array transposed from row to column and vice versa.
*/
function transpose(a)
{
return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment