Last active
June 1, 2020 02:39
-
-
Save ttsukagoshi/edcad0a1ae07dbd21acaf8d63935ca30 to your computer and use it in GitHub Desktop.
Create Google Spreadsheet sheet(s) from set(s) of header and value
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Create Google Spreadsheet sheet(s) from set(s) of header and value | |
* | |
* @param {Object} spreadsheet - Spreadsheet object to create sheet on | |
* @param {Array} dataSet - Array of formatted object containing data object(s) which should be in form of | |
* [ | |
* {'sheetName':{string}'sheetName0', 'sheetData':{Array}dataObject0}, | |
* {'sheetName':{string}'sheetName1', 'sheetData':{Array}dataObject1},... | |
* ] | |
* @param {string} prefix - Optional. Prefix to be added to title of each sheet. | |
* @param {Date} timestamp - Optional. Timestamp of dataSet; defaults to the time when script is executed. | |
* @return {Array} createdSheets - Array of sheets created in form of [{sheetId0=sheetName0},{sheetId1=sheetName1}, ...] | |
*/ | |
function createSheets_(spreadsheet, dataSet, prefix = '', timestamp = new Date()) { | |
let createdSheets = []; | |
for (let i = 0; i < dataSet.length; ++i) { | |
let createdSheet = {}; | |
let dataObject = dataSet[i]; | |
let sheetName = dataObject.sheetName; | |
let sheetData = dataObject.sheetData; | |
let sheetTitle = `${prefix} - ${sheetName} as of ${Utilities.formatDate(timestamp, timeZone, "yyyy-MM-dd'T'HH:mm:ssXXX")}`; | |
let sheet = spreadsheet.insertSheet(sheetName, i); // Insert new sheet to spreadsheet | |
// Enter sheet title | |
sheet.getRange(1, 1).setValue(sheetTitle); | |
if (sheetData.length == 0) { | |
sheet.getRange(3, 1).setValue('No Data Available'); // Header Message | |
} else { | |
// Breakdown object sheetData into its header and values; see function breakdownObject for details | |
let sheetDataElem = breakdownObject_(sheetData); | |
let sheetDataHeader = sheetDataElem[0]; // note that sheetDataHeader is already a two-dimensional array | |
let sheetDataValues = sheetDataElem[1]; | |
// Enter into sheet | |
sheet.getRange(3, 1, 1, sheetDataHeader[0].length).setValues(sheetDataHeader); // Header | |
sheet.getRange(4, 1, sheetDataValues.length, sheetDataHeader[0].length).setValues(sheetDataValues); // Values | |
} | |
createdSheet[sheet.getSheetId()] = sheetName; | |
createdSheets.push(createdSheet); | |
} | |
return createdSheets; | |
} | |
/** | |
* Converts the input array of object into array of keys, i.e.,header, and its values | |
* | |
* @param {Array} data - array of objects | |
* @return {Array} output - array of [header, values], where header and values are both two-dimensional arrays | |
*/ | |
function breakdownObject_(data) { | |
let header = []; | |
let values = []; | |
let keys = Object.keys(data[0]); | |
let key = ''; | |
// define header | |
header[0] = keys; | |
// define values | |
for (let i = 0; i < data.length; ++i) { | |
let datum = data[i]; | |
values[i] = []; | |
for (let j = 0; j < keys.length; ++j) { | |
key = keys[j]; | |
values[i].push(datum[key]); | |
} | |
} | |
let output = [header, values]; | |
return output; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment