@@ -2165,70 +2165,96 @@ var ex_obj = {
21652165 state: " MN" ,
21662166 job: " IT Administrator"
21672167};
2168+ ```
21682169
2169- function strFromProp (obj , str ){
2170- var arr = str .split (" " );
2171- var _arr = [];
2172- for (var i = 0 ; i < arr .length ; i++ ) {
2173- var str = arr[i];
2170+ ``` javascript
2171+ /**
2172+ * Returns a string.
2173+ * Words wrapped by the delimiter are replaced with the matching property value.
2174+ *
2175+ * @param {Object} obj
2176+ * @param {string} str
2177+ * @param {string} delim
2178+ * @returns {string}
2179+ */
2180+
2181+ function strFromProp (obj , str , delim ) {
2182+ var split = str .split (" " );
2183+ var result = [];
2184+ for (var i = 0 ; i < split .length ; i++ ) {
2185+ var _str = split[i];
21742186 for (var prop in obj){
2175- var mod = str .substr (0 , str .length - 2 ).substr (2 );
2176- if (obj .hasOwnProperty (mod)){
2177- _arr .push (obj[mod]);
2187+ var first = _str .slice ().charAt (0 );
2188+ var last = _str .slice ().substr (- 1 );
2189+ var mod = _str .substr (0 , _str .length - 1 ).substr (1 );
2190+ if ((obj .hasOwnProperty (mod)) && (first === delim) && (last === delim)) {
2191+ result .push (obj[mod]);
21782192 } else {
2179- _arr .push (str );
2193+ result .push (_str );
21802194 }
21812195 break ;
21822196 }
21832197 }
2184- return _arr .join (" " );
2198+ return result .join (" " );
21852199}
21862200
2187- Logger .log (strFromProp (ex_obj, " name: << name>> - state: << state>> - job: << job>> " )); // name: Jon - state: MN - job: IT Administrator
2201+ Logger .log (strFromProp (ex_obj, " name: % name% - state: % state% - job: % job% " , " % " )); // " name: Jon - state: MN - job: IT Administrator"
21882202```
21892203
21902204#### Replace Object Properties ####
21912205
21922206##### Replace Object Properties in Document #####
21932207
21942208``` javascript
2195- function findReplaceInDoc (obj , docObj ) {
2196- var body = docObj .getBody ();
2209+ /**
2210+ * Words wrapped by the delimiter are replaced with the matching property value.
2211+ *
2212+ * @param {Object} obj
2213+ * @param {Document} doc
2214+ * @param {string} delim
2215+ */
2216+
2217+ function findReplaceInDoc (obj , doc , delim ) {
2218+ var body = doc .getBody ();
21972219 for (var prop in obj) {
2198- var query = " << " + prop + " >> "
2220+ var query = delim + prop + delim;
21992221 var val = obj[prop];
22002222 body .replaceText (query, val);
22012223 }
22022224}
22032225
22042226var fldr_frid = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" );
2205- var file_frid = createVerifyDocIn (fldr_frid, " find-replace-doc" );
2206- var doc_frid = openFileAsDocument (file_frid);
2227+ var doc_frid = createVerifyDocIn (fldr_frid, " find-replace-doc" );
22072228var body_frid = doc_frid .getBody ();
22082229body_frid .clear ();
2209- doc_frid .appendParagraph (" name: << name>> " );
2210- doc_frid .appendParagraph (" state: << state>> " );
2211- doc_frid .appendParagraph (" job: << job>> " );
2212- findReplaceInDoc (ex_obj, doc_frid);
2230+ doc_frid .appendParagraph (" name: % name% " );
2231+ doc_frid .appendParagraph (" state: % state% " );
2232+ doc_frid .appendParagraph (" job: % job% " );
2233+ findReplaceInDoc (ex_obj, doc_frid, " % " );
22132234```
22142235
22152236##### Replace Object Properties in Spreadsheet #####
22162237
22172238``` javascript
2218- function findReplaceinSpreadsheet (obj , ssObj ) {
2219- var numSheets = ssObj .getNumSheets ();
2220- var sheets = ssObj .getSheets ();
2239+ /**
2240+ * Words wrapped by the delimiter are replaced with the matching property value.
2241+ *
2242+ * @param {Object} obj
2243+ * @param {Spreadsheet} ss
2244+ * @param {string} delim
2245+ */
2246+
2247+ function findReplaceInSpreadsheet (obj , ss , delim ) {
2248+ var numSheets = ss .getNumSheets ();
2249+ var sheets = ss .getSheets ();
22212250 for (var i = 0 ; i < numSheets; i++ ) {
2222- var sheetObj = sheets[i];
2223- Logger .log (sheetObj);
2224- var values = sheetObj .getDataRange ().getValues ();
2225- Logger .log (values);
2226- for (var row in values){
2227- var update = values[row].map (function (original ){
2251+ var sheet = sheets[i];
2252+ var values = sheet .getDataRange ().getValues ();
2253+ for (var row in values){
2254+ var update = values[row].map (function (original ) {
22282255 var text = original .toString ();
2229- Logger .log (text);
22302256 for (var prop in obj) {
2231- var query = " << " + prop+ " >> "
2257+ var query = delim + prop+ delim;
22322258 if (text .indexOf (query) !== - 1 ) {
22332259 text = text .replace (query, obj[prop]);
22342260 }
@@ -2237,36 +2263,43 @@ function findReplaceinSpreadsheet(obj, ssObj) {
22372263 });
22382264 values[row] = update;
22392265 }
2240- sheetObj .getDataRange ().setValues (values);
2266+ sheet .getDataRange ().setValues (values);
22412267 }
22422268}
22432269
2244- var fldr_fris = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" );
2245- var file_fris = createVerifySSIn (fldr_fris, " find-replace-sheet" );
2246- var ss_frid = openFileAsSpreadsheet (file_fris);
2270+ var fldr_fris = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" );
2271+ var ss_frid = createVerifySSIn (fldr_fris, " find-replace-sheet" );
22472272var sheet_frid = ss_frid .getSheets ()[0 ];
22482273sheet_frid .clear ();
22492274
22502275var val_frid = [
22512276 [ " name" , " state" , " job" ],
2252- [ " << name>> " , " << state>> " , " << job>> " ]
2277+ [ " % name% " , " % state% " , " % job% " ]
22532278];
22542279
22552280var range_frid = sheet_frid .getRange (" A1:C2" );
22562281range_frid .setValues (val_frid);
2257- findReplaceinSpreadsheet (ex_obj, ss_frid);
2282+ findReplaceInSpreadsheet (ex_obj, ss_frid, " % " );
22582283```
22592284
22602285##### Replace Object Properties in Sheet #####
22612286
22622287``` javascript
2263- function findReplaceinSheet (obj , sheetObj ) {
2264- var values = sheetObj .getDataRange ().getValues ();
2288+ /**
2289+ * Words wrapped by the delimiter are replaced with the matching property value.
2290+ *
2291+ * @param {Object} obj
2292+ * @param {Sheet} sheet
2293+ * @param {string} delim
2294+ */
2295+
2296+ function findReplaceinSheet (obj , sheet , delim ) {
2297+ var values = sheet .getDataRange ().getValues ();
22652298 for (var row in values){
2266- var update = values[row].map (function (original ){
2299+ var update = values[row].map (function (original ) {
22672300 var text = original .toString ();
22682301 for (var prop in obj) {
2269- var query = " << " + prop+ " >> "
2302+ var query = delim + prop + delim;
22702303 if (text .indexOf (query) !== - 1 ) {
22712304 text = text .replace (query, obj[prop]);
22722305 }
@@ -2275,68 +2308,96 @@ function findReplaceinSheet(obj, sheetObj) {
22752308 });
22762309 values[row] = update;
22772310 }
2278- sheetObj .getDataRange ().setValues (values);
2311+ sheet .getDataRange ().setValues (values);
22792312}
22802313
2281- var fldr_fris = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" );
2282- var file_fris = createVerifySSIn (fldr_fris, " find-replace-sheet" );
2283- var ss_frid = openFileAsSpreadsheet (file_fris);
2284- var sheet_frid = ss_frid .getSheets ()[0 ];
2285- sheet_frid .clear ();
2314+ var fldr_fris = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" );
2315+ var ss_fris = createVerifySSIn (fldr_fris, " find-replace-sheet" );
2316+ var sheet_fris = ss_fris .getSheets ()[0 ];
2317+ sheet_fris .clear ();
22862318
2287- var val_frid = [
2319+ var val_fris = [
22882320 [ " name" , " state" , " job" ],
22892321 [ " <<name>>" , " <<state>>" , " <<job>>" ]
22902322];
22912323
2292- var range_frid = sheet_frid .getRange (" A1:C2" );
2293- range_frid .setValues (val_frid );
2294- findReplaceinSheet (ex_obj, sheet_frid );
2324+ var range_fris = sheet_fris .getRange (" A1:C2" );
2325+ range_fris .setValues (val_fris );
2326+ findReplaceinSheet (ex_obj, sheet_fris, " % " );
22952327```
22962328
22972329#### Copy Template for Item in Array of Objects and Replace Object Properties ####
22982330
22992331##### Copy Document Template and Replace Object Properties #####
23002332
23012333``` javascript
2302- function createDocsFromTemplateArrObj (arrObj , template , naming , fldr , ts ) {
2334+ /**
2335+ * For each object, create a new template document and merge in object values.
2336+ *
2337+ * @requires strFromProp()
2338+ * @requires copyFile()
2339+ * @requires findReplaceInDoc()
2340+ * @param {Object[]} arrObj
2341+ * @param {Document} templateDoc
2342+ * @param {string} naming
2343+ * @param {Folder} fldr
2344+ * @param {boolean} ts
2345+ * @param {string} delim
2346+ */
2347+
2348+ function createDocsFromTemplateArrObj (arrObj , templateDoc , naming , fldr , ts , delim ) {
23032349 for (var i = 0 ; i < arrObj .length ; i++ ) {
23042350 var obj = arrObj[i];
2305- var name = strFromProp (obj, naming);
2306- if (ts == true ) name += " - " + fmat12DT ();
2307- var docId = copyFile (template, fldr).setName (name).getId ();
2351+ var name = strFromProp (obj, naming, delim);
2352+ if (ts === true ) name += " - " + fmat12DT ();
2353+ var file = DriveApp .getFileById (templateDoc .getId ());
2354+ var docId = copyFile (file, fldr).setName (name).getId ();
23082355 var doc = DocumentApp .openById (docId);
2309- findReplaceInDoc (obj, doc);
2356+ findReplaceInDoc (obj, doc, delim );
23102357 }
23112358}
23122359
23132360var sheet_cdftao = SpreadsheetApp .getActiveSpreadsheet ().getSheetByName (" Sheet2" );
23142361var arrObj_cdftao = arrObjFromSheet (sheet_cdftao, 2 );
2315- var fldr1_cdftao = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" )
2362+ var fldr1_cdftao = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges" );
23162363var fldr2_cdftao = createVerifyPath (" google-apps-script-cheat-sheet-demo/merges/arrObj-docs" );
2317- var file_cdftao = createVerifyDocIn (fldr1_cdftao, " template-doc" );
2318- var doc_cdftao = openFileAsDocument (file_cdftao);
2364+ var doc_cdftao = createVerifyDocIn (fldr1_cdftao, " template-doc" );
23192365var body_cdftao = doc_cdftao .getBody ();
23202366body_cdftao .clear ();
2321- doc_cdftao .appendParagraph (" First: << First>> " );
2322- doc_cdftao .appendParagraph (" Last: << Last>> " );
2323- doc_cdftao .appendParagraph (" Grade: << Grade>> " );
2324- doc_cdftao .appendParagraph (" Homeroom: << Homeroom>> " );
2325- doc_cdftao .appendParagraph (" Email: << Email>> " );
2326- createDocsFromTemplateArrObj (arrObj_cdftao, file_cdftao , " Name: << Last>> << First>> " , fldr2_cdftao, true );
2367+ doc_cdftao .appendParagraph (" First: % First% " );
2368+ doc_cdftao .appendParagraph (" Last: % Last% " );
2369+ doc_cdftao .appendParagraph (" Grade: % Grade% " );
2370+ doc_cdftao .appendParagraph (" Homeroom: % Homeroom% " );
2371+ doc_cdftao .appendParagraph (" Email: % Email% " );
2372+ createDocsFromTemplateArrObj (arrObj_cdftao, doc_cdftao , " Name: % Last% % First% " , fldr2_cdftao, true , " % " );
23272373```
23282374
23292375##### Copy Spreadsheet Template and Replace Object Properties #####
23302376
23312377``` javascript
2332- function createSpreadsheetsFromTemplateArrObj (arrObj , template , naming , fldr , ts ) {
2378+ /**
2379+ * For each object, create a new template spreadsheet and merge in object values.
2380+ *
2381+ * @requires strFromProp()
2382+ * @requires copyFile()
2383+ * @requires findReplaceInSpreadsheet()
2384+ * @param {Object[]} arrObj
2385+ * @param {Spreadsheet} templateDoc
2386+ * @param {string} naming
2387+ * @param {Folder} fldr
2388+ * @param {boolean} ts
2389+ * @param {string} delim
2390+ */
2391+
2392+ function createSpreadsheetsFromTemplateArrObj (arrObj , templateSS , naming , fldr , ts , delim ) {
23332393 for (var i = 0 ; i < arrObj .length ; i++ ) {
23342394 var obj = arrObj[i];
2335- var name = strFromProp (obj, naming);
2336- if (ts == true ) name += " - " + fmat12DT ();
2337- var ssId = copyFile (template, fldr).setName (name).getId ()
2395+ var name = strFromProp (obj, naming, delim);
2396+ if (ts === true ) name += " - " + fmat12DT ();
2397+ var file = DriveApp .getFileById (templateSS .getId ());
2398+ var ssId = copyFile (file, fldr).setName (name).getId ();
23382399 var ss = SpreadsheetApp .openById (ssId);
2339- findReplaceinSpreadsheet (obj, ss);
2400+ findReplaceInSpreadsheet (obj, ss, delim );
23402401 }
23412402}
23422403
@@ -2351,72 +2412,12 @@ var sheet2_csftao = ss2_csftao.getSheets()[0];
23512412
23522413var val_csftao = [
23532414 [ " First" , " Last" , " Grade" , " Homeroom" , " Email" ],
2354- [ " << First>> " , " << Last>> " , " << Grade>> " , " << Homeroom>> " , " << Email>> " ]
2415+ [ " % First% " , " % Last% " , " % Grade% " , " % Homeroom% " , " % Email% " ]
23552416];
23562417
23572418var range_csftao = sheet2_csftao .getRange (" A1:E2" );
23582419range_csftao .setValues (val_csftao);
2359- createSpreadsheetsFromTemplateArrObj (arrObj_csftao, file_csftao, " Name: <<Last>> <<First>>" , fldr2_csftao, true )
2360- ```
2361-
2362- #### Cell Shading ####
2363-
2364- ``` javascript
2365- var values_cs = [
2366- " Strongly Disagree" ,
2367- " Somewhat Disagree" ,
2368- " No Opinion" ,
2369- " Somewhat Agree" ,
2370- " Strongly Agree"
2371- ]
2372-
2373- var obj_cs = {
2374- " Student Has Good Study Habits" : " Strongly Agree" ,
2375- " Student is Organized" : " No Opinion" ,
2376- " Student Gets Along Well With Others" : " Somewhat Agree"
2377- }
2378- ```
2379-
2380- ##### Index Object Properties ####
2381-
2382- ``` javascript
2383- function indexValForObj (obj , indexArray ) {
2384- var _obj = {};
2385- for (var prop in obj) {
2386- if (obj .hasOwnProperty (prop)) {
2387- if (indexArray .indexOf (obj[prop]) != - 1 ) {
2388- _obj[prop] = (indexArray .indexOf (obj[prop])+ 1 )
2389- }
2390- }
2391- }
2392- return _obj;
2393- }
2394-
2395- Logger .log (indexValForObj (obj_cs, values_cs)); // {Student Has Good Study Habits=5.0, Student Gets Along Well With Others=4.0, Student is Organized=3.0}
2396- ```
2397-
2398- ##### Shade Cells in Sheet #####
2399-
2400- ``` javascript
2401- function shadeCellsInSheet (sheetObj , colLetter , obj , color ) {
2402- var lRow = sheetObj .getLastRow ();
2403- var vRange = sheetObj .getRange (colLetter + " 1" + " :" + colLetter + lRow);
2404- var arrVal = arrForRange (vRange);
2405- var index = colNum (colLetter)
2406- for (var i = 0 ; i < arrVal .length ; i++ ) {
2407- for (var prop in obj) {
2408- if (prop == arrVal[i]) {
2409- var letter = numCol (index + obj[prop]);
2410- var sRange = sheetObj .getRange (letter + (i+ 1 ));
2411- sRange .setBackground (color);
2412- }
2413- }
2414- }
2415- }
2416-
2417- var obj_scis = indexValForObj (obj_cs, values_cs);
2418- var sheet_scis = SpreadsheetApp .getActiveSpreadsheet ().getSheetByName (" Sheet3" );
2419- shadeCellsInSheet (sheet_scis, " A" , obj_scis, " #D3D3D3" );
2420+ createSpreadsheetsFromTemplateArrObj (arrObj_csftao, file_csftao, " Name: %Last% %First%" , fldr2_csftao, true , " %" );
24202421```
24212422
24222423#### Create Bulleted List in Document for Array of Objects ####
0 commit comments