Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save phillypb/612f5b51d0f945aff28ee8769a822976 to your computer and use it in GitHub Desktop.
Save phillypb/612f5b51d0f945aff28ee8769a822976 to your computer and use it in GitHub Desktop.
/**
* Generate Menu items based on data in Google Sheet.
*
* Run the Function to display the popup message to the user after selecting one of the Menu items.
*/
// call this Function as soon as the Google Sheet has opened to generate our Menu items
dynamicMenu();
// call this Simple Trigger to initiate the code
function onOpen() { };
function dynamicMenu() {
// run Function to get Sheet data as JavaScript Object (name:value pairs)
var sheetData = getSheetData();
console.log(sheetData);
// create Menu item in Sheet
var menu = SpreadsheetApp.getUi().createMenu("Hello there!");
// loop through Sheet data and add as sub-Menu items
for (var i = 0; i < sheetData.length; i++) {
// get array of JavaScript Objects
var message = sheetData[i];
// get Language 'name'
var functionName = "_" + message.name;
console.log("functionName is: " + functionName);
// get Message details
var args = message.args;
console.log("args is: " + args);
// use 'this' keyword method to link Menu item name with corresponding Function
this[functionName] = sayHello(args);
// add sub-Menu item to main Menu
menu.addItem(message.name, functionName);
};
// finish building onOpen Menu
menu.addToUi();
};
function sayHello(args) {
return function () {
Browser.msgBox(args);
};
};
/**
* Get data from 'Data' Sheet and return as JavaScript Object (name:value pairs)
*/
function getSheetData() {
// create empty array for pushing row data into
var rowData = [];
// get Spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get Sheet
var sheet = ss.getSheetByName("Data");
// get Sheet data
var sheetData = sheet.getDataRange().getValues();
// remove Header row
sheetData.shift();
// loop through each row, combine into JavaScript Object and push into array
for (var i = 0; i < sheetData.length; i++) {
// get single row of data
var row = sheetData[i];
console.log(row);
// extract each column value
var language = row[0];
var formal = row[1];
var informal = row[2];
// create popup message
var msg = `"Hello" in ${language} is "${formal}" or "${informal}"`;
// push values and popup message into array
rowData.push({
'name': language,
'args': msg
});
};
// return array to Parent Function
return rowData;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment