Skip to content

Commit eed67be

Browse files
Jon ChristensenJon Christensen
authored andcommitted
shading later, working through merges
1 parent a076225 commit eed67be

File tree

2 files changed

+135
-134
lines changed

2 files changed

+135
-134
lines changed

README.md

Lines changed: 133 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -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

22042226
var 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");
22072228
var body_frid = doc_frid.getBody();
22082229
body_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");
22472272
var sheet_frid = ss_frid.getSheets()[0];
22482273
sheet_frid.clear();
22492274

22502275
var val_frid = [
22512276
[ "name", "state", "job" ],
2252-
[ "<<name>>", "<<state>>", "<<job>>"]
2277+
[ "%name%", "%state%", "%job%"]
22532278
];
22542279

22552280
var range_frid = sheet_frid.getRange("A1:C2");
22562281
range_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

23132360
var sheet_cdftao = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
23142361
var 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");
23162363
var 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");
23192365
var body_cdftao = doc_cdftao.getBody();
23202366
body_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

23522413
var val_csftao = [
23532414
[ "First", "Last", "Grade", "Homeroom", "Email" ],
2354-
[ "<<First>>", "<<Last>>", "<<Grade>>", "<<Homeroom>>", "<<Email>>"]
2415+
[ "%First%", "%Last%", "%Grade%", "%Homeroom%", "%Email%"]
23552416
];
23562417

23572418
var range_csftao = sheet2_csftao.getRange("A1:E2");
23582419
range_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

Comments
 (0)