25 มม.ย. 2020
พมมพพค์ รรั้งท่ีท 1 : 3 ธ.ค. 2019
พมมพค์พ รง้ัร ทท่ี 2 : 2 เม.ย. 2020
พมม พ์พคร้ัรงท่ีท 3 : 25 มม.ย. 2020
Google Apps Script
เซอรว์ร ิสว Spreadsheet
เรยีร บเรยรี งโดย
วสัสนต์ต คณุค ดดิลกเศวต
[email protected]
Line ID : wasankds
08-1459-8343
www.poeclub.org
สารบญบั
สารบญบั ...............................................................................4
คคานาค ................................................................................12
บททที่ 1 การบันบ ททึก Macro ใน Google Sheets..............................15
1.1. การบนร ทกึท Macro ใน Google Sheet ...................................................................16
1.1.ก.) ขัข้นตอนการบนข ทกทึ Macro (16)
1.1.ข.) การเรรยี กใช้ช Macro (17)
1.1.ค.) ดโูด คช้ดท่รที Macro สรา้ช ง (17)
1.2. Macro แบบ Absolute และ Relative .................................................................18
1.2.ก.) Macro จดข รดูปแบบเซลล์บล ขนทึทกแบบ Absolute และ Relative (18)
1.2.ข.) Macro บนข ททึก Alternating Colors (19)
บทท่ีท 2 เรทยกใช้เช ซอรว์ร วสิ Spreadsheet........................................21
2.1. เรทยกใชช้เซอร์พวสม Spreadsheet ............................................................................... 22
2.2. จบร ไฟลท์พ ทแี่ อค็อ ททฟ ..................................................................................................... 22
2.2.ก.) getActiveSpreadsheet() (22)
2.2.ข.) getUrl(), getId() และ getName() (23)
2.2.ค.) getName() (23)
2.3. flush() ................................................................................................................... 24
บททท่ี 3 ไฟล.ร์ .......................................................................25
3.1. การเปิปดไฟลพ์ ............................................................................................................ 26
3.1.ก.) openById() และ openByUrl() (26)
3.1.ข.) open() (26)
3.2. การสร้ชางไฟลพ์ .......................................................................................................... 27
3.3. หน้าช ตตา่ งแบบต่ตางๆ .................................................................................................. 27
3.3.ก.) toast() (27)
3.3.ข.) show() (28)
บทที่ท 4 ชช้ทที ..........................................................................29
4.1. จรบชทัรท้ ตต่อจากไฟลพ์ ................................................................................................... 30
4.2. getActiveSheet() ................................................................................................ 30
4.3. getSheets() .......................................................................................................... 30
4.4. getSheetByName() ............................................................................................ 30
4.5. insertSheet() ....................................................................................................... 31
4.6. deleteSheet() ..................................................................................................... 32
4.7. activate() ............................................................................................................. 33
4.8. getParent() .......................................................................................................... 33
4.9. การลา้ช งชทรทั้ .............................................................................................................. 33
4.9.ก.) clear() (33)
4.9.ข.) clearContents() และ clearFormats() (34)
บททที่ 5 การจดบั การแถว หรรือคอลมบั นร์..........................................35
5.1. การแทรกแถว ......................................................................................................... 36
5.2. การลบแถว ............................................................................................................. 37
บททท่ี 6 เรชน้ จ.์ร ......................................................................39
6.1. จรบเร้ชนจพ์ .................................................................................................................. 40
6.2. getRange() ........................................................................................................... 40
6.2.ก.) getRange(row, column) (40)
6.2.ข.) getRange(row, column, numRows) (40)
6.2.ค.) getRange(row, column, numRows, numColumns) (41)
6.2.ง.) getRange(a1Notation) (41)
6.3. getLastRow() และ getLastColumn() ................................................................41
6.4. getA1Notation() ................................................................................................. 42
6.5. getCell() ............................................................................................................... 42
6.6. getDataRegion() .................................................................................................. 43
6.6.ก.) getDataRegion() (43)
6.6.ข.) getDataRegion(dimension) (43)
6.7. getDataRange() ................................................................................................... 44
6.8. getValue() และ getValues() .............................................................................. 46
6.9. getDisplayValue() และ getDisplayValues() ...................................................47
6.10. จบร เรนช้ จจพ์ ากชชท่ีอเรช้นจพ์ (Named ranges) ...............................................................47
6.10.ก.) getRangeByName() (47)
6.10.ข.) getNamedRanges() (48)
6.10.ค.) setNamedRange() (49)
6.10.ง.) removeNamedRange() (50)
6.10.จ.) setRange() และ setName() (50)
6.10.ฉ.) remove() (51)
6.11. offset() ............................................................................................................... 52
6.12. setValue() และ setValues() ............................................................................ 53
6.13. นาน คอลรมน์มพ าคนานวณ แลช้ววางผลลรพธ์ไพ วค้ช อลรมน์ขพ ช้างๆ ..........................................54
6.14. กรอกสูสตรลงเซลล์พ ................................................................................................. 55
6.14.ก.) setFormula() (55)
6.14.ข.) setFormulaR1C1() (56)
6.15. getActiveRange() .............................................................................................. 57
6.16. getRow(), getColumn(), getNumRows(), getNumColumns() ...................58
6.17. การล้ชางเนรชอั้ หา และ การลชา้ งรูสปแบบ .....................................................................59
6.17.ก.) clearContents() (59)
6.17.ข.) clearFormats() (59)
6.18. appendRow() .................................................................................................... 59
6.19. โนชต้ ...................................................................................................................... 60
6.19.ก.) setNote() และ setNotes() (60)
6.19.ข.) clearNote() (61)
บทท่ีท 7 กลลุม่ ของเรชน้ จ.์ร ...........................................................63
7.1. getRanges() ......................................................................................................... 64
7.2. getActiveRangeList() .......................................................................................... 64
7.3. getRangeList() ..................................................................................................... 65
7.4. getSelection() และ getCurrentCell() ..............................................................65
7.5. setActiveRange() ................................................................................................ 67
7.6. setCurrentCell() ................................................................................................. 67
7.7. activate() ............................................................................................................. 68
7.8. getNextDataCell() และ getNextDataRange() .................................................68
7.8.ก.) getNextDataCell() (68)
7.8.ข.) getNextDataRange() (69)
บทท่ที 8 รรูปแบบ....................................................................71
8.1. setNumberFormat() .......................................................................................... 72
8.1.ก.) setNumberFormat() (72)
8.1.ข.) setNumberFormats() (72)
8.2. เสชน้ ขอบ ................................................................................................................. 73
8.3. แบค็อ กราวนพ์ ............................................................................................................. 74
8.3.ก.) setBackground() และ setBackgrounds() (74)
8.3.ข.) setBackgroundRGB() (75)
8.3.ค.) ลิลงค์เล คร่ีอรท งมรอชชว่ ยเลรอกสีร (76)
8.3.ง.) setBackgroundObject() (76)
8.4. กนาหนคุคณลกร ษณะให้ชกบร เร้นช จพ์ ................................................................................... 78
8.4.ก.) setFontFamily() และ setFontFamilies() (78)
8.4.ข.) setFontSize() และ setFontSizes() (78)
8.4.ค.) setFontWeight() และ setFontWeights() (79)
8.4.ง.) setFontStyle(fontStyle) และ setFontStyles(fontStyles) (80)
8.4.จ.) setFontColor() และ (80)
8.4.ฉ.) setHorizontalAlignment() (81)
8.4.ช.) setVerticalAlignment() (81)
8.4.ซ.) setFontLine(fontLine) (82)
8.5. ตวร อยาต่ งการกาน หนดรสูปแบบหลายอยา่ต งใหก้ช บร เรช้นจ์พ ..................................................83
8.6. Text wrapping ..................................................................................................... 84
8.6.ก.) getWrapStrategy() และ getWrapStrategies()(84)
8.6.ข.) Enum WrapStrategy (84)
8.6.ค.) setWrapStrategy() และ setWrapStrategies()(85)
8.6.ง.) setWrap(isWrapEnabled) และ setWraps(isWrapEnabled) (85)
8.7. Text Style ............................................................................................................ 86
8.7.ก.) newTextStyle() และ setTextStyle() (86)
8.7.ข.) เมถอดทีร่ทใชก้ช าก หนดรดูปแบบของขชอ้ ความ (87)
8.8. Rich Text Value .................................................................................................. 88
บททท่ี 9 การก๊กอปป.ป ................................................................91
9.1. copyTo() คลาส Range ........................................................................................ 92
9.1.ก.) copyTo(destination) (92)
9.1.ข.) copyTo(destination, options) (93)
9.1.ค.) copyTo(destination, copyPasteType, transposed)(94)
9.2. กอ๊ก ปป้ปีรปูส แบบไปที่เท รชน้ จ์พ ........................................................................................... 95
9.2.ก.) copyFormatToRange() (95)
9.3. กอ๊ก ปปไ้ปี ฟล์พ Google Sheets ดว้ช ย copy() ..............................................................96
9.3.ก.) copy() (96)
บททีท่ 10 Banding หรือร Alternating Colors.................................99
10.1. applyRowBanding() ....................................................................................... 100
10.2. จรบ Banding ...................................................................................................... 101
10.3. การลบ Banding หรชอ Alternating Colors .....................................................101
บททที่ 11 Data validation......................................................103
11.1. สร้าช ง Data validation ใหกช้ บร เซลลพใ์ นเรช้นจพ์ .......................................................104
11.1.ก.) คลาสและเมถอดทีทร่สาก คญข (104)
11.1.ข.) ตวข อยชา่ งทที่ร 1 (105)
11.1.ค.) ตขวอยา่ช งททีร่ 2 (105)
11.2. ดูสและอรพเดท Data validation .........................................................................106
11.2.ก.) getDataValidation() (106)
11.2.ข.) getDataValidations() - มีร s (109)
11.3. Checkboxes .................................................................................................... 111
11.3.ก.) insertCheckboxes() (111)
11.3.ข.) requireCheckbox() (112)
บททที่ 12 การเรทยง (Sorting)..................................................115
12.1. การเรทยงขชอ้ มลูส โดยใชเช้ มถอด sort() ....................................................................116
12.1.ก.) การเรรียงขอช้ มูลด ในเร้นช จ์ล (เมถอดในคลาส Range)(116)
12.1.ข.) การเรีรยงขช้อมดูลในชั้ีรขท (เมถอดในคลาส Sheet) (118)
บทท่ีท 13 ฟฟิลเตอรร์ (ตัวบ กรอง)..................................................119
13.1. คลาสทท่เี กยที่ วขชอ้ งกบร ฟลิป เตอรพ์ ............................................................................... 120
13.2. การจรบฟิลป เตอร์พ ................................................................................................... 120
13.2.ก.) เมถอดทีรท่เกยท่ีร วขชอ้ ง (120)
13.2.ข.) ตวข อย่าช งทีทร่ 1 : จขบฟิฟลเตอรล์ทีรท่กรองแบบ Filter by values ไวชอ้ ยชา่ งเดยีร ว (121)
13.2.ค.) ตขวอยา่ช งทที่ร 2 : จบข ฟิลฟ เตอรล์ทกร่ีท รองแบบ Filter by values และ Filter by condition (122)
13.3. การสร้ชางฟิปลเตอรพ์ ............................................................................................... 123
13.3.ก.) เมถอดททีร่เกรีท่ยวขอ้ช ง (123)
13.3.ข.) ตวข อยา่ช งที่รท 1 ใสฟ่ช ฟิลเตอรล์ให้กช ขบเรช้นจ์ล (124)
13.3.ค.) ตวข อยาช่ งทีท่ร 2 ใสฟช่ ิฟลเตอรล์ใหช้กขบเร้ชนจแ์ล ละกรองแบบ Filter by values (125)
13.4. การแกชไ้ ขกฎการกรอง ......................................................................................... 125
13.4.ก.) ตขวอย่าช งทีรท่ 1 (125)
13.4.ข.) ตวข อย่ชางท่ีทร 2 ฟลิฟ เตอร์ลโดยใช้ชคช่าในเซลลล์(Dropdown) (126)
13.5. การถอดกฎการกรองหรชอถอดฟปลิ เตอร์พ ................................................................127
13.5.ก.) remove() - ถอดกฎการกรอง (127)
13.5.ข.) removeColumnFilterCriteria() - ถอดคอลมข นล์ททีรม่ รีการกรอง (127)
13.6. การเรยท งข้อช มูลส ผลการกรอง ................................................................................. 127
13.7. withCriteria() ................................................................................................... 128
13.7.ก.) เมถอดที่รเท กทีย่ร วขอ้ช ง (128)
13.8. กฎการกรองแบบ Filter by condition ............................................................129
13.8.ก.) ตวข อย่ชางท่รีท 1 – whenTextContains() (129)
13.8.ข.) ตวข อยชา่ งทร่ที 2 – whenDateEqualTo() (130)
บททีท่ 14 การสร้ชาง Chart......................................................131
14.1. สร้าช ง Bar Chart ................................................................................................ 132
14.1.ก.) ตวข อยชา่ งการสราช้ ง Bar Chart - คอลขมนล์ Cost (132)
14.1.ข.) ตวข อย่าช งการสรา้ช ง Bar Chart- คอลขมน์ล Total (133)
14.2. newChart() และ build() ................................................................................134
14.3. setChartType() ............................................................................................... 134
14.4. addRange() ..................................................................................................... 135
14.5. setNumHeaders() .......................................................................................... 135
14.6. setPosition() ................................................................................................... 135
14.7. setMergeStrategy() ........................................................................................ 136
14.8. insertChart(), updateChart() และ getChart() ...........................................137
14.8.ก.) ตวข ยา่ช งทรีท่ 1 (137)
14.8.ข.) ตวข ยา่ช งทรที่ 2 (138)
14.9. จบร ชารตพ์ เปน็ป ภาพ ............................................................................................... 138
14.9.ก.) ส่ชงเมลล์ (138)
14.9.ข.) ใสช่ไวช้ในชีั้รขทอีร่นท (139)
บทท่ีท 15 Drawing และ Over Grid Image.................................141
15.1. Drawing(รปูส วาด) .............................................................................................. 142
15.2. Over Grid Images ........................................................................................... 143
บททที่ 16 User Interfaces.....................................................145
16.1. การสรา้ช งเมนูส ...................................................................................................... 146
16.1.ก.) คลาสและเมถอดททีรส่ กาคขญในการสร้ชางเมนูด (146)
16.2. alert() ............................................................................................................... 148
16.3. prompt() .......................................................................................................... 149
16.4. Custom dialogs ( Modal Dialog ) ...............................................................151
16.4.ก.) ตวข อย่าช ง : แสดง Dialog (151)
16.5. Custom sidebars ............................................................................................ 152
บททที่ 17 คลาส Browser......................................................155
17.1. msgBox() ......................................................................................................... 156
17.2. inputBox() ....................................................................................................... 157
บททีท่ 18 การประยลกตใ์ร ชง้ช าน..................................................159
18.1. การกรองแถวซรัาน้ ทัมรง้ ............................................................................................ 160
18.2. Data Lookup ................................................................................................... 161
บททท่ี 19 วับนและเวลา...........................................................163
19.1. สร้าช งวรตถวุค นร ทีแ่ท ละเวลา ...................................................................................... 164
19.1.ก.) new Date() (164)
19.1.ข.) +new Date() (165)
19.2. การทนางานกบร วรนทที่และเวลา ............................................................................... 165
19.3. การคนานวณเกท่ยี วกบร เวลา .................................................................................... 167
19.4. setHours() ....................................................................................................... 168
บทท่ีท 20 ฟัฟงกร์ชนับ่ีท , เมถอด และ คลณสมบตบั วิ ทท่นี ลาุ่ สนใจ.....................169
20.1. toString() ......................................................................................................... 170
20.2. String() ............................................................................................................. 170
20.3. toLowerCase() และ toUpperCase() ............................................................171
20.4. PI ....................................................................................................................... 172
20.5. isNaN() ............................................................................................................. 172
20.6. Number() ........................................................................................................ 173
20.7. split() ................................................................................................................ 173
20.8. parseInt() ......................................................................................................... 174
20.9. charAt() ........................................................................................................... 175
20.10. charCodeAt() ................................................................................................ 175
20.11. fromCharCode() .......................................................................................... 176
20.12. trim() .............................................................................................................. 176
20.13. substr() และ substring() .............................................................................. 177
20.14. search() ......................................................................................................... 178
20.15. replace() ........................................................................................................ 179
20.16. match() .......................................................................................................... 180
20.17. includes() - Chrome V8 ............................................................................. 180
20.18. IndexOf() ....................................................................................................... 181
20.19. lastIndexOf() ................................................................................................ 181
20.20. toFixed .......................................................................................................... 182
20.21. toPrecision() ................................................................................................. 182
20.22. valueOf() ....................................................................................................... 183
บททีท่ 21 Script Properties...................................................185
21.1. Script Properties คชออะไร ? ............................................................................ 186
21.2. การสร้ชาง Script Properties แบบกรอกค่าต เอง ..................................................186
21.3. การจบร Script Properties ................................................................................ 186
21.4. การสรา้ช ง Script Properties โดยการเขยท นสครมปต์พ ............................................187
21.4.ก.) setProperty() (187)
21.4.ข.) setProperties() (188)
21.5. deleteAllProperties() และ deleteProperty() ............................................189
บทท่ที 22 Regular Expression................................................191
22.1. Regular Expression คอช อะไร ? ........................................................................192
22.1.ก.) Regular Expression ครออะไร ? (192)
22.1.ข.) การใชช้งาน Regular Expression ใน Apps Script (192)
22.2. Regular Expression Systax ทสที่ นาคญร .............................................................193
22.2.ก.) Regular Expression Systax ทีรท่สาก คญข (193)
22.2.ข.) การผสม Regular Expression ท่รีนท ่าช สนใจ (194)
22.3. การคช้นหาและแทนททโ่ี ดยใช้ช Regular Expression .............................................197
22.4. RegExp() .......................................................................................................... 197
22.5. exec() ............................................................................................................... 198
22.6. test() ................................................................................................................. 199
คคานคา
หนขงสอร เล่มช น้ขัรี เป็ปนหนึทงี่ ในชุดช การเขยท นโปรแกรม Google Apps Script โดยในเล่มช นี้อขัร ธลบิ ายการใชชง้ าน
เซอร์วพ สม Spreadsheet ก็คก อร เซอรล์วิสล สกาหรขบการใช้ชงาน Google Sheets นทีนข่ เอง
นอกเหนรอจากเนอรขั้ หาดงข กลา่ช ว อะไรทีทร่สาก คขญททรี่เก่ีทรยวข้อช งกอ็ก ธิบล ายไว้ดช ว้ช ย เชช่น Regular Expression, วนัว ทที่และ
เวลา เปป็นตนช้
ผเ้ชูด ขรยี น เขรยี นหนขงสอร เลม่ช นรีัข้ จดชุ ประสงคด์ล ขงั้ เดลิม กค็ก อร เกบอ็ ไว้ชอ่าต นเอง
เมีรอ่ท ผ้ชูดเขยีร นศึทกษาเรอีท่ร งอะไร กจ็ก ะไปเรีรยนร้ชูจด ากสทรี่อออนไลน์ลในอลินเตอร์ลเน็กต ทข้ังคอร์ลสออนไลน์ล วลดิ รีโอ หรรอ เอกสาร
ทขง้ั ในแบบฟรรแี ละเสยรี เงลนิ
แตยช่ คุช นข้รีั เราต้ชองเรียร นรดชู้อะไรให้ชเรว็ก โดยเฉพาะเรรทอ่ี งของ IT ผูเดช้ ขีรยนจงึท ตั้งข ใจจะดวูด ิดล ีรโอเพรียงรอบเดยีร ว จทึงดดไู ป พมิล พล์
สรุชปไปดวช้ ย เวลาจกาอะไรไมช่ไดช้ มาดูดจากที่รทพิลมพล์สรุชปไว้ช งช่ายกว่ชาการไปย้ชอนดูดจากวิลดีรโอ นอกจากน้รัขีกก็ยขงนกามาทบทวนไดช้
งา่ช ย ในอนาคตสามารถเพี่มทิล เตลมิ เสรลิมแต่งช เนัรข้อหาได้ชเรีร่อท ยๆดว้ช ย
หากเนรั้อช หา ไมต่ละเอทยด อาต่ นแลช้วไมตเ่ ขาช้ ใจ หรอช ไม่ไต ดแ้ช ปลเปป็นไทยในบางส่ตวน ตอช้ งขออภรยไว้ช ณ ทท่ีนัทร้ เพราะ
ผสชู้เขทยนเขทยนโปรแกรมไป(ตามท่ีทลสูกคช้าวต่าจ้ชาง) แล้ชวกอ็ไปศทึกษาส่ตวนท่ีทเก่ทียวข้ชอง จากนรั้นกอ็เขทยนลงในหนรงสชอเก็อบไว้ช
บางทงท านก็เอ ร่งต มาก จนไม่ตมทเวลาเขทยนอยตา่ งละเอยท ด
หนขงสรอเล่ชมนรีั้ข ความต้ัขงใจดขั้งเดิลมของผู้ชดเขีรยน กก็ครอ ต้รังใจเก็อบไว้ชอต่านเองคนเดทยว อย่ชางไรก็กดีร อุชตสช่าหล์พลิมพ์ลไวช้เป็ปน
หนขงสรอแล้ชว จะเก็กบไวชอ้ ช่านคนเดรียวกร็ก ู้ดสช ทกึ เสรยี ดาย ฉะนข้ัน ผดเชู้ ขียร นจทงึ นกาออกมาแบช่งปัปน
เนชที่องดชว้ ย ผชสเู้ ขยท นใหค้ช วามสาน ครญกบร ประเดอ็นดาช้ นลขม สทม ธมธิ์มาก ฉะนรั้นจทงึ ขอแจ้ชงไวช้ ณ ท่ทีน้ทัร ตรัง้ แตต่ต ชน้
กค็อ อช
1. เนรั้ขอหาในหนขงสอร ผดชู้เขียร นรวบรวมมาจากแหลชง่ ตาช่ งๆในอินล เตอรเล์ น็ตก โดยจะพยายามใหมช้ ากทร่สีท ดชุ ทจีท่ร ะบอก
ลงลิ ค์ลหรอร แหล่ชงททีร่มาในแต่ชละหวข ขช้อ เพราะหนงข สรอเลช่มนัขรี้ถดกู เขีรยนไวน้ช านแลช้ว บางเรอ่ีทร งกก็ลมร ก๊กอปป้ีปลลงิ คม์ล าแปะไว้ช
2. ผ้ดเูช ขยีร นรวบรวมเนัรข้อหามาจากแหล่งช ตา่ช งๆ และเขรียนเพมีทล่ิ เตมิล ไปดวช้ ย
3. หนขงสรอเลม่ช นรัขี้แจกฟรีร ผด้ชูเขรยี นไมม่ช รีร ายไดช้จากหนขงสรอเลช่มนขีรั้
หนรงสชอเลต่มนรั้ทยรงไม่ตจบเสทยททเดทยว หากผสชู้เขทยนวต่าง จะมาเขทยนเพ่มีทมเตมมเรท่ีชอยๆ ให้ชดูสเวอร์พชี่รทนตามวรนทท่ีทท่ีปลต่อย
หนงร สชอ
วสขนตล์ คุชณดลลิ กเศวต
[email protected]
081-459-8343
Line ID : wasankds
บททท่ี 1
การบบนั ทึกท Macro
ใน Google Sheets
ทีทร่มา
คอร์รสออนไลนร์ Apps Script Blastoff! (เรทยนฟรท)
https://courses.benlcollins.com/courses/435404/lectures/6708124
1.1. การบบนั ทึทก Macro ใน Google Sheet
1.1.ก.) ขั้นขว ตอนการบัวนทึทก Macro
Macro เป็ปนโปรแกรมเลก็กๆ ทรท่ีสรช้างโดยการบขนททึกข้ัขนตอนการทาก งาน เชช่น พลิมพล์ คลิลก เป็ปนตช้น จากนขั้น
ระบบจะสร้าช งเปน็ป โคช้ดของ Google Apps Script ใหช้อตข โนมตข ิล
ขันร้ ตอนการบรนททึก Macro จรดรสปู แบบเซลลพ์ - ใชช้ Absolute
1. ไปท่เรีท มนูด Tools → Macros → Record จะปรากฎตา่ช งตามภาพ
1.1 เลอร ก Use absolute references
2. ทกางาน - โดยทกาคกาสงีทข่ ตช่างๆ เชช่น คลมกเมา้ช สพ์ พมม พ์พ เลอช กจากเมนูส เปปน็ ตน้ช ****
3. คลกิล ที่ทร Save เมอ่ีรท จบการทาก งาน – จะปรากฎหน้าช ต่ชางมาให้บช ขนททึก Macro
4. ที่ทรหน้ชาตช่าง Save new macro - บนข ทึทกมาโคร
4.1 ทชีรท่ อช่ ง Name - ตงข้ั ชอท่ีร Macro
4.2 ทชีทร่ ่ชอง Shortcut กกาหนดคีรยล์ล ดข ให้กช บข การเรรียกใชช้ Macro เชน่ช <Ctrl><Alt><Shift><1> ถึงท <9>
4.3 คลกิล ปปุมช่ Save
16 เซอรวร์ สวิ Spreadsheet
1.1.ข.) การเรทยกใช้ช Macro
หลขงจากบนข ทกึท Macro แล้วช เราสามารถเรยีร กใชช้ Macro ทีบรท่ นข ทกทึ ไวไ้ช ด้ชทที่ร
เมนูด Tools → Macros → (ชทชี่อ Macro)
1.1.ค.) ดูดโค้ชดทที่ Macro สรชา้ ง
ทีทหร่ น้ชาแรก Google Sheet ไปท่รทีเมนูด Tools → Script Editor ตามภาพ
จะปรากฎหนช้าโปรเจกค็ Google Apps Script แสดงโคดช้ ต่าช งๆที่ถรท ดูกสรช้างขทึน้ขั ตามภาพ
โดย วสสันต์ต คคณุ ดิดลกเศวต ([email protected]) 17
1.2. Macro แบบ Absolute และ Relative
( หากยงร ไมต่เขช้าใจเรอ่ทีช งโคชด้ ใหชข้ า้ช มไปอา่ต นบทท่ที 2 กอ่ต น )
1.2.ก.) Macro จดวั รดปู แบบเซลลบ์ร นวั ททึกแบบ Absolute และ Relative
2 โค้ชดต่ชอไปนขัีร้ ขั้ขนตอนการบขนทึทก Macro เหมรอนกขน แต่ชตช่างกขนทรีท่เลรอก Absolute และ Relative จทึงได้ช
โคดช้ และผลการรขนตาช่ งกขน
โคชด้ ต่ชอไปนัี้รข ไดช้จากการบขนทึทก Macro แบบ Absolute Reference - เมี่ทรอรขน Macro จะจขดรดูปแบบเซลลล์
A1 เทชา่ นข้ัน
// เมอ่ชีท รนวั Macro จะจัดว รดูปแบบเซลลร์ A1 เท่าท น้ัขวน
function Pattaya_Blue() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
spreadsheet.getActiveRangeList().setFontWeight('bold')
.setFontColor('#0000ff')
.setFontFamily('Pattaya');
}
โค้ดช ตช่อไปน้ัขีร ไดจช้ ากการบขนททึก Macro แบบ Relative Reference - เมที่รอรขน Macro จะจดข รูดปแบบเซลล์ลทรท่ี
เลรอก
// เมอทชี่ รวนั Macro จะจวัดรูปด แบบเซลล์รทเท่ี ลอช ก
function Pattaya_RED_18() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getActiveRangeList().setFontColor('#ff0000')
.setFontSize(18)
.setFontStyle('italic')
}
18 เซอรรว์ สิว Spreadsheet
1.2.ข.) Macro บนัว ทกึท Alternating Colors
บขนททึก การจดข รดปู แบบตารางขอ้ช มดูลดวช้ ย Alternating Colors โดยบขนทึทกแบบ Relative Reference
// การบัวนทึทก เราเลอช กอาณาเขตของเซลล์รกอท่ น แล้ชวจงทึ ใสท่ Alternating Color
// *** แบบ Relative Reference ***
function TableAlterColor() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getCurrentCell().offset(0, 0, 14, 7).activate() ; // กาก หนดขอบเขตเซลล์รชวัดเจน
spreadsheet.getActiveRange().applyRowBanding(SpreadsheetApp.BandingTheme.LIGHT_GREY) ;
var banding = spreadsheet.getActiveRange().getBandings()[0];
banding.setHeaderRowColor('#8bc34a')
.setFirstRowColor('#ffffff')
.setSecondRowColor('#eef7e3')
.setFooterRowColor(null) ;
}
Macro ขา้ช งตน้ช เวลารนข ผลจาก Alternating Colors จะทกากขบตารางข้ชอมูดลขนาด 14x7 เสมอ สขงเกตชโุ ค้ชด
ที่ทบร รรทดข spreadsheet.getCurrentCell().offset(0, 0, 14, 7).activate(); กคก็ อร 14 แถว 7 คอลมข น์ล ฉะน้ขัน จงึท
ไมช่สามารถทาก กขบเรช้นจตล์ ามขนาดทีรทเ่ ราเลรอกได้ช
มาลองดดกู ารบนข ทกทึ แบบ Absolute Reference กนข ดดูบาช้ ง
// บัวนทกทึ การจวัดรดูปแบบตารางขอ้ช มลูด โดยใช้ช Alternating Color
// *** แบบ Absolute Reference ***
function TableAlterColor2ABS() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1:G14').activate();
spreadsheet.getRange('A1:G14').applyRowBanding(SpreadsheetApp.BandingTheme.LIGHT_GREY);
var banding = spreadsheet.getRange('A1:G14').getBandings()[0];
banding.setHeaderRowColor('#e91d63')
.setFirstRowColor('#ffffff')
.setSecondRowColor('#fddce8')
.setFooterRowColor(null);
}
Macro ขชา้ งตนช้ เวลารนข ผลจาก Alternating Color จะใสชใ่ หกช้ ขบเรช้นจล์ A1:G14 เสมอ ใช้งช านไม่ตไดอ้ช ทก
เหมชอนกนร ตอช้ งเข้าช ไปแก้ชไขโคช้ดเอง
โดย วสนัส ตต์ คุณค ดิดลกเศวต ([email protected]) 19
การแกไ้ช ขโคช้ด
ไปทที่เร มนดู Tools → Script Editor จากนัขน้ แกช้โคดช้ เป็ปนดขงน้ขัรี
โคดช้ ใส่ช Alternating Colors เขรยี นสั้นข ๆตามดช้านลาช่ ง แคน่ช ีรก้ขั กใ็ ชไ้ช ด้ช
function TableAlterColor2ABS() { // ลดบรรทัสดโคด้ค แต่ตไดค้ผลเหมือม นเดิดม
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1:G14').activate();
spreadsheet.getRange('A1:G14').applyRowBanding(SpreadsheetApp.BandingTheme.ORANGE);
}
อยาช่ งไรกด็ก รี โคดช้ ข้ชางบน ใชไ้ช ดเช้ ฉพาะกขบเซลลลท์ กีทร่ กาหนดแบบตายตวข เทาช่ น้นขั กก็คอร A1:G14 เท่าช นขัน้
ฉะน้ขันต้ชองแก้ช ดงข ตช่อไปนร้ัีข
// แบบทท่ี 1
// ใสท่ Alternating Color กัวบเรชน้ จร์ – เลชอกเซลลเ์ร ดทยวในตารางขอ้ช มดูล ใสใ่ท หก้ช บัว ททกุ เซลลทร์ ทต่ี ดวิ กนวั
function TableAlterColor2ABS-2() {
var spreadsheet = SpreadsheetApp.getActive() ;
spreadsheet.getDataRange().applyRowBanding(SpreadsheetApp.BandingTheme.ORANGE) ;
}
// แบบทท่ี 2
// ใสท่ Alternating Color เฉพาะเซลลร์ทีท่เลอช ก ***
function TableAlterColor2ABS-3() {
var spreadsheet = SpreadsheetApp.getActive() ;
spreadsheet.getActiveRange().applyRowBanding(SpreadsheetApp.BandingTheme.ORANGE) ;
}
20 เซอรว์ร ิวส Spreadsheet
บททที่ 2
เรยท กใช้เช ซอร์วร สิว
Spreadsheet
2.1. เรรยี กใชช้เซอรวร์ สวิ Spreadsheet
Spreadsheet Service
https://developers.google.com/apps-script/reference/spreadsheet
Extending Google Sheets
https://developers.google.com/apps-script/guides/sheets
เซอรวร์ ิสว Spreadsheet ใชสช้ รชา้ ง เขชา้ ถงึท ไฟล์ล และแกช้ไขขอ้ช มลดู ตาช่ งๆในไฟลล์ Google Sheets
คลาส SpreadsheetApp
การเรีรยกใช้ชงานเซอรล์วลิส Spreadsheet เร่ลีทิมต้ชนจากคลาส SpreadsheetApp จากนข้ันจึทงจขบคลาสยช่อยต่ชอ
ไปเรรทอ่ี ยๆ จนกว่ชาจะถึทงคลาสทเี่รท ราตช้องการจะควบคชุม
ตวร อย่ตาง - โคชด้ ต่อช ไปนร้ขีั สร้าช งไฟล์ล Google Sheets ขึนัขท้ มา จากน้ขันจขบ Url และ Id ของไฟลอ์ล อกมา Logs
ดดู
// สรค้างไฟล์ต Google Sheets ชชื่อม Finances ไวค้ทช่ืท Google Drive
var ssNew = SpreadsheetApp.create("Finances") ;
Logger.log(ssNew.getUrl()) ;
// พมิด พต์ : URL ของไฟลต์ - ผลลพสั ธต์เชนต่
// https://docs.google.com/spreadsheets/d/1TjYroQflJs2QNfz9wqhwnSFZ4rHChK9y8Toh22b1_D0
Logger.log(ssNew.getId()) ;
// พมดิ พต์ ID ของไฟลต์ - ผลลสัพธ์ตเช่นต
// 1TjYroQflJs2QNfz9wqhwnSFZ4rHChK9y8Toh22b1_D0
2.2. จบับไฟล์ทร แีท่ร อ็อคทีรฟ
2.2.ก.) getActiveSpreadsheet()
คลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
getActiveSpreadsheet() - เมถอดในคลาส SpreadsheetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getactivespreadsheet
getActiveSpreadsheet() ใชจช้ ขบไฟล์ล Google Sheets โดยจะครนค่าช กลขบมาเปป็นคลาส Spreadsheet
getActiveSpreadsheet() ใช้ชไดกช้ ขบโปรเจกค็ Google Apps Scritpt ทรเที่ ขยรี นฝปงั อยชดูใ่ นไฟลล์ Google Sheets
หากเปป็น Google Apps Script แบบ Stand alone จะคนร คา่ช เปป็น null
ตวข อยาช่ งการใชชง้ าน
// พมดิ พ์ต URL ของไฟล์ต Google Sheets ทชโทื่ ปรเจจ็ค Google Script ฝัฝงอยตย่
//
Logger.log(SpreadsheetApp.getActiveSpreadsheet().getUrl()) ;
22 เซอรวร์ ิวส Spreadsheet
2.2.ข.) getUrl(), getId() และ getName()
getid() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getid
ใชจช้ บข Id ของไฟล์ล Google Apps โดยจะครนคชา่ กลบข มาเปป็น String(ขอ้ช ความ)
getUrl() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#geturl
ใชชจ้ ขบ Url ของไฟลล์ Google Apps โดยจะครนคา่ช กลบข มาเปป็น String(ข้ชอความ)
getName() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getname
ใช้จช ขบ Url ชอรี่ท ไฟล์ล Google Apps โดยจะคนร ค่ชากลขบมาเปน็ป String(ขอช้ ความ)
Url และ Id ของไฟลร์
Url ของไฟลล์ Google Sheets ครอ ข้ชอความในช่อช งทร่ทีเราพิลมพ์ชล ที่อร เวกบ็ ลงไป ตวข อยา่ช งตามภาพ
Id ครอสชว่ นขชอ้ ความในบล็กอคดขงต่อช ไปนรขั้ี https://docs.google.com/spreadsheets/d/ Id /edit
2.2.ค.) getName()
getName()
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getname
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getname
getName() เปนป็ เมถอดในหลายคลาส เชน่ช คลาส Spreadsheet, คลาส Sheet เปป็นตนช้ ใชจช้ บข ชอทร่ี ของ
วตข ถุช เชชน่ ช่ีรทอไฟลล์ , ชที่อร ชีท้ัขร เปป็นตชน้
var ss = SpreadsheetApp.getActive() ; // จบัส ชม่อืช ชชทที้
var name = ss.getName() ;
// พมดิ พ์ต : Object
Logger.log(typeof ss) ; // พมิด พต์ : String
Logger.log(typeof name) ; // พมิด พ์ต : (ชอมืช่ Spreadsheet)
Logger.log(name) ;
โดย วสันส ต์ต คคุณดลดิ กเศวต ([email protected]) 23
2.3. flush()
flush() - เมถอดในคลาส SpreadsheetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#flush
โคด้ช บางอยช่าง ทเรีท่ ราตชอ้ งการใหชป้ รากฎผลใน Google Sheets ขณะรนข แตช่วาช่ พอรขนโคด้ช จนจบแลช้ว กลขบ
ไมช่ปรากฎผลให้ชเห็กนขณะรนข แตช่เห็กนผลตอนจบเลย
flush() ใชสช้ งที่ข ให้คช วามเปลทยรี่ นแปลงขณะรขนโคดช้ ปรากฎใน Google Sheets
flush() มีขร อ้ช เสีรย ทร่ทีท กาให้กช ารประมวลผลท้ขังหมดชา้ช ลง แตชก่ ็กมขรี ้อช ดทีร ที่ร เราสามารถเหกน็ ความเปลย่ทีร นแปลงทีร่ท
Google Sheets ทาก ใหชส้ ขมผขสได้วช ่าช โค้ชดกาก ลงข ทาก งานอยดู่ช
ผูเดช้ ขรียนมกข ใชช้ flush() กขบอะไรที่รตท ชอ้ งรนข เพยรี งครั้งข เดยีร ว เชชน่ การรขน Setup เพรีอท่ ตดลิ ตงั้ข ระบบงาน เป็ปนตช้น
ตขวอยช่าง - โคช้ดตช่อไปนีัรข้ถ้ชาไม่ชมีรบรรทขด SpreadsheetApp.flush() จะไม่ชเห็กนความเปลรีท่ยนแปลงระหว่ชาง
รขน จะเหกน็ ผลสุดช ทา้ช ยเลย
var sheet = SpreadsheetApp.getActiveSheet() ;
for (var i = 0 ; i < 20; i++) {
if ((i % 2) == 0) {
sheet.getRange('A1').setBackground('green') ;
sheet.getRange('B1').setBackground('red') ;
} else {
sheet.getRange('A1').setBackground('red') ;
sheet.getRange('B1').setBackground('green') ;
}
SpreadsheetApp.flush() ;
ผล – เห็กนสีรพขรัน้ หลขงของเซลล์ล A1 และ B1 สลขบสีกร ขน
24 เซอร์วร ิสว Spreadsheet
บทท่ที 3
ไฟล์ร
3.1. การเปดปิ ไฟล์ร
3.1.ก.) openById() และ openByUrl()
openById() - เมถอดในคลาส SpreadsheetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyidid
openByUrl() - เมถอดในคลาส SpreadsheetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyurlurl
openById() และ openByUrl() ใชชเ้ ปดฟิ ไฟลลโ์ ดยระบชุ Id หรรอ Url ของไฟลต์ล ามลาก ดขบ
ตวร อยาต่ ง โค้ชดตชอ่ ไปน้ัขรี เปดิฟ ไฟล์ล Google Sheets ตาม URL ของไฟลล์ที่รทร ะบุช จากนั้นข Logs ชที่อร ไฟลอ์ล อกมาดดู
var ss =
SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/abc1234567/edit') ;
Logger.log(ss.getName()) ;
โคด้ช ถดข ไป ใหผช้ ลลพข ธล์ เช่นช เดีรยวกบข โคดช้ กอ่ช นหนาช้
var ss = SpreadsheetApp.openById("abc1234567") ;
Logger.log(ss.getName()) ;
3.1.ข.) open()
คลาส File
https://developers.google.com/apps-script/reference/drive/file.html
ไฟลใ์ล น Google Drive ซึ่งที สามารถเขช้าถทงึ และถดูกสรชา้ งไดชโ้ ดยใชเ้ช ซอรว์ล สลิ Drive
open(file)
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openfile
เปดิฟ ไฟลล์ Google Sheets ท่รทเี ปป็นวตข ถไุช ฟล์ล โดยพารามลิเตอร์ล file เปปน็ วตข ถุไช ฟล์ล
26 เซอรร์ววิส Spreadsheet
ตวข อย่าช ง
// จัสบไฟลทต์ ช่ทถื ยกมารค์ต ดาวใน Google Drive และเป็นป ไฟลต์ Google Sheets
// จากนนี้สชั เปปิดไฟล์ต Spreadsheet และ Logs ชอมืช่ ชีทชท้ แรกของไฟล์อต อกมาดย
var files = DriveApp.searchFiles(
'starred = true and mimeType = "' + MimeType.GOOGLE_SHEETS + '"') ;
while (files.hasNext()) {
var spreadsheet = SpreadsheetApp.open(files.next()) ;
var sheet = spreadsheet.getSheets()[0] ;
Logger.log(sheet.getName()) ;
}
3.2. การสรชา้ งไฟลร์
create(name) – เมถอดในคลาส SpreadsheeetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#createname
create(name, rows, columns)
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#createname,-rows,-columns
create() ใชชส้ ร้าช งไฟล์ล Spreadsheet
ตวข อยา่ช ง – เมอ่ทีร รนข โคดช้ จะสรา้ช งไฟลล์ Google Sheets ไวช้ทรที่ My Drive (ทรีท่ Root folder)
var ssNew = SpreadsheetApp.create("Finances") ;
Logger.log(ssNew.getUrl()) ; // Url ของไฟลต์
var ssNew2 = SpreadsheetApp.create("Finances2",50,5) ;
Logger.log(ssNew2.getUrl()) ; // Url ของไฟลต์
เมอี่รท สร้าช งไฟลแ์ล ลวช้ จากนขั้น สามารถสรชา้ งช้ทรขีั ต่อช ได้ช หากตช้องการสรา้ช งไฟลไ์ล วช้ยงข โฟลเดอรแ์ล บบเจาะจง ตอช้ ง
ใชชเ้ ซอร์ลวสิล Drive รวช่ มดว้ช ย
3.3. หนา้ช ตาต่ งแบบตตา่ งๆ
3.3.ก.) toast()
toast(msg, title, timeoutSeconds) – เมถอดในคลาส Spreadsheeet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#toastmsg,-title,-timeoutseconds
แสดงหน้ชาตาช่ ง Popup ท่ีมทร มชุ ขวาลช่าง โดยกกาหนดเวลาการเปฟดิ ไว้ชได้ช
พารามิลเตอร์ล
Name Type Description
msg String
title String ขอค้ ความทจื่ชท ะแสดง
timeoutSeconds Number ไตเตีดิลช้ ของกรอบ Popup
เวลาทืจ่ทช ะเปดปิ ทิชดงี้ ไว้ค หนตว่ ยเป็ปนวนดิ าทท
ถาค้ เวค้นไวค้ จะหมายถงถึ 5 วดินาทท
ถค้าเป็นป คตา่ ลบ จะเปดปิ ค้าค งไวคจ้ นกว่าต เราจะปดปิ เอง
โดย วสนัส ตต์ คณุค ดิลด กเศวต ([email protected]) 27
ตวข อยาช่ ง
// แสดง วนดิ าทท
SpreadsheetApp.getActiveSpreadsheet().toast('Task started', 'Status' , 3) ;
ผลลพข ธล์ - ปรากฎหนช้าตาช่ ง Popup ทีมร่ท ชมุ ขวาลาช่ งของ Spreadsheet ตามภาพ
3.3.ข.) show()
show(userInterface) – เมถอดในคลาส Spreadsheeet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#showuserinterface
show() แสดงหนช้าตา่ช ง ท่ทเรี ราสามารถสราช้ งองคป์ล ระกอบเองได้ช ใชสช้ ร้ชางหนา้ช ตชา่ งรขบคช่าจากยสดู เซอร์ไล ด้ช (ถ้ชา
รขบหลายค่ชาสร้ชาง Sidebar ดกีร วาช่ ) พารามิลเตอรล์ userInterface กค็ก อร วขตถชุ HtmlOutput (โคด้ช Html)
ตวร อย่ตาง – โคดช้ ต่อช ไปนร้ใัีข ชชเ้ ซอรว์ล ิลส HtmlService สรา้ช งวตข ถุช HtmlOutput (โคด้ช HTML) สกาหรขบใชช้เปน็ป
เนั้ขอร หาใหกช้ บข เมถอด show()
var htmlApp = HtmlService
.createHtmlOutput('<p>A change of speed, a change of style...</p>')
.setTitle('My HtmlService Application')
.setWidth(250)
.setHeight(300) ;
SpreadsheetApp.getActiveSpreadsheet().show(htmlApp) ;
ผล
28 เซอรร์ววสิ Spreadsheet
บททีท่ 4
ชชทที้
4.1. จบับชีร้ทช ต่ตอจากไฟลร์
เมี่ทรอจขบไปทีร่ท Spreadsheet หรรอ ไฟลล์ Google Sheets แลช้ว เชน่ช
SpreadsheetApp.getActiveSpreadsheet() หรอร SpreadsheetApp.openById(id) เปนป็ ตน้ช จากนขัน้ เรา
สามารถจขบต่อช ไปยขงชทร้ีัข ตช่างๆในไฟลต์ล ่ชอได้ช โดยใชชห้ ลายเมถอด
4.2. getActiveSheet()
getActiveSheet() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getactivesheet
ใชจช้ บข ชท้ขีัร ทที่เร ปิดฟ อยู่ชด โดยครนคช่ากลบข มาเปป็นวตข ถุช Sheet
ตวข อยาช่ ง
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
4.3. getSheets()
getSheet() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getsheets
ใชจ้ช ขบชรีขัท้ ทขั้งหมดใน Spreadsheet โดยคนร ค่าช กลขบมาเปน็ป คลาส Sheet[] หรรอ หลายชัรี้ทข ที่เรท กกบ็ อยดใ่ชู นอาเรยล์
เชช่น [Sheet, Sheet, Sheet, … ]
ตวข อยา่ช ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheets = ss.getSheets ;
Logger.log(sheets.length) ; // นบัส จจานวนชที้ทช ทงชัส้ี หมด
sheets.forEach(function(sheet){ // วนพดมิ พช์ต ือ่ชม ช้ททชี ที้สชงั หมด
Logger.log(sheet.getName()) ;
}) ;
หมายเหตคุ : โคดช้ ตชอ่ ไปนขีรั้ จขบชขทั้รี ในลาก ดบข ทร่ีท 1 เพยรี งชท้ขีัร เดีรยว
getSheets[](0)
Logger.log(getSheets[](0).getName())
4.4. getSheetByName()
getSheetByName() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getsheetbynamename
ใชจ้ช บข ชี้ทัขร ตามชีอท่ร ชีรข้ัท โดยครนคาช่ กลขบมาเปน็ป คลาส Sheet
30 เซอร์รวสิว Spreadsheet
ตวข อยาช่ ง
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1") ;
if (sheet != null) { // ถ้าค sheet ไมใ่ต ชต่ null หรือม ไมม่ต ชท ้ีชทท ใดๆ
Logger.log(sheet.getIndex()) ; // พมดิ พ์ต : 1 (ลาจ ดบสั ของชทท้ีช )
}
4.5. insertSheet()
insertSheet() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheet
insertSheet(sheetIndex) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetsheetindex
insertSheet(sheetIndex, options) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetsheetindex,-options
insertSheet(options) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetoptions
insertSheet(sheetName) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetsheetname
insertSheet(sheetName, sheetIndex) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetsheetname,-sheetindex
insertSheet(sheetName, sheetIndex, options) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetsheetname,-sheetindex,-options
insertSheet(sheetName, options) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetsheetname,-options
insertSheetWithDataSourceTable(spec) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertsheetwithdatasourcetablespec
insertSheet ใชชแ้ ทรกชีข้ทรั ใหม่ชให้ชกขบ Spreadsheet
พารามลิเตอร์ล
Name Type Description
sheetName String ชอ่ชืม ชีชท้ท
sheetIndex Integer ลาจ ดบสั ของชท้ีชทใหมท่ต ่ชจทื ะแทรก (เรืชดม่ิ ททช่ื 0)
option Object ระบคุเปนป็ ออ๊อปเจก็จ ของไฟลตท์ จ่ืชท ะใช้เค ป็ปนเทมเพลต
ตวข อยชา่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var templateSheet = ss.getSheetByName('Sales') ;
ss.insertSheet('My New Sheet', 1, {template: templateSheet}) ;
โดย วสัสนต์ต คณุค ดดิลกเศวต ([email protected]) 31
ตวข อยา่ช ง – โค้ดช ต่ชอไปน้ขัรี ตรวจสอบช่ีรทอชีัรข้ทก่ชอนว่าช มีรหรอร ไม่ช ถา้ช มีรก็ลก บก่ชอน ถา้ช ไมช่มกีร ็กแทรกชัีรข้ทใหมช่ จากนัข้นจะ
ทาก อะไรในชีรัท้ข ใหมกช่ วก็ ่ชากขนไป
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var newSheet ;
var isSheet = ss.getSheetByName('ชขั้ททใหม'ท่ ) ;
// ถคา้ ไมต่มทชทีชท้ ชช่มือ 'ชช้ทีท ใหมต่'
if (isSheet == null)
{
newSheet = ss.insertSheet('ชททขั้ ใหมท่') ;
}
// ถคา้ มทชททชี้ ชมื่ชอ 'ชีชทท้ ใหมต่'
else
{
ss.deleteSheet(isSheet) ;
newSheet = ss.insertSheet('ชทขั้ท ใหม่ท') ;
// ไมตต่ อค้ งลบชท้ทชี ออก แคลต่ คา้ งข้อค มลย และรปย แบบกไจ็ ด้ค แลว้ค จับส ใสต่ต สวั แปรใหมต่ ดงัส นีทช้
// newSheet = isSheet.clear() ;
}
// กรอกข้คอความลงในชช้ีทท ใหมเต่ ซลลต์ A1
newSheet.getRange('A1').setValue('Something') ;
4.6. deleteSheet()
deleteSheet(sheet) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#deletesheetsheet
ใชช้ลบชทรีขั้ ทรรีท่ ะบุช โดยพารามลเิ ตอร์กล ็คก รอ วตข ถชุ Sheet ท่ีตทร ช้องการลบ
ตวข อยา่ช ง
var ss = SpreadsheetApp.getActive() ;
var sheet3 = ss.getSheetByName('Sheet3') ;
if ( sheet3 != null)
{
ss.deleteSheet(sheet3) ;
}
32 เซอร์รวสิว Spreadsheet
4.7. activate()
activate() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#activate
ใชก้ช กาหนดชขทร้ัี ใหเช้ ป็นป ตวข แอ็กคทฟรี คลา้ช ยกขบการคลกิล เมช้าส์ลเลรอกชท้ัขรี ดขงกลาช่ ว
ตวข อย่ชาง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var first = ss.getSheetByName("first") ;
first.activate() ; // เลมอื กชทีท้ช ชื่อชม first
4.8. getParent()
getParent() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getparent
ครนคช่าเปป็นวขตถุช Spreadsheeet ท่ีทรชขรีั้ทนข้ันอยช่ดู getParent() เป็ปนเมถอดในหลายคลาส และหลายเซอรล์วลิส
ใชจช้ บข วตข ถตชุ วข แมช่
ตวข อยช่าง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
// parent กค็จ อืม Spreadsheet ทชช่ืท ชที้ทน้ชสันี อยตย่
var parent = sheet.getParent() ;
4.9. การลช้างชี้ทชร
4.9.ก.) clear()
clear(options) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#clearoptions
ใชลช้ า้ช งชั้ทรีข โดย สามารถกกาหนดไดช้ วาช่ จะล้าช งเนร้ัขอหาหรรอรูดปแบบ ซ่ีทึงกาก หนดไดช้ทพทีร่ ารามเตอรล์ options โดย
ตอ้ช งกกาหนดแบบวตข ถชุ หรอร คาช่ ใน { } (ดตดู วข อยาช่ ง เพอร่ีท ทกาความเข้าช ใจวธลิ กรี ารกาก หนดค่ชาของ options )
พารามิลเตอร์ล
Name Type Description
options Object ออ๊อปเจ็จค Javascript ทื่ปชท ระกอบไปด้ควยพารามิดเตอรต์ข้ีชนสั สยง
(ดยตาราง พารามเดิ ตอรข์ต ีนั้สช สยง)
พารามเลิ ตอรขล์ นัข้ สงูด
Name Type Description
contentsOnly Boolean จะลค้างเนีช้ืมอหาหรือม ไม่ต
formatOnly Boolean จะลาค้ งรปย แบบหรอืม ไม่ต
โดย วสนัส ต์ต คุคณดลิด กเศวต ([email protected]) 33
ตวข อยา่ช ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
sheet.clear({ formatOnly: true, contentsOnly: true }) ;
4.9.ข.) clearContents() และ clearFormats()
Clear spreadsheet content while preserving any formatting
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#clear-spreadsheet-content-while-preserving-any-formatting
clearContents() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#clearcontents
ใชช้ลบเน้ัขอร หาทขั้งหมดในชัร้ขีท แตช่ไม่ลช บรดูปแบบของเซลลล์ต่ชางๆในชี้ทรัข โดยจะคนร คา่ช กลขบมาเปปน็ คลาส Sheet
Clear spreadsheet formatting while preserving any data
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#clear-spreadsheet-formatting-while-preserving-any-data
clearFormats() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#clearformats
ใชล้ช า้ช งรดูปแบบทงขั้ หมดในชรขั้ที แต่ไช ม่ชลบเนอัขร้ หาตาช่ งๆในเซลลล์ โดยจะคนร ค่ชากลบข มาเปป็นคลาส Sheet
ตวข อยาช่ ง
var ssID = 'sheet_ID';
var s1Name = 'Sheet1' ;
var s2Name = 'Sheet2' ;
var ss = SpreadsheetApp.openById(ssID) ;
var sheet1 = ss.getSheetByName(s1Name) ;
var sheet2 = ss.getSheetByName(s2Name) ;
sheet1.clearContents() ;
sheet2.clearFormats() ;
เมีทร่อรนข โคดช้ เน้รอัข หาในชีรท้ัข ชีทรอ่ Sheet1 จะถกูด ลบออกไป แตร่ช ูดปแบบของเซลลล์ตชา่ งๆ จะยงข คงอยด่ชู สวช่ น
Shee2 เน้ขอรั หายขงคงอยด่ชู แตร่ช ูดปแบบของเซลลถล์ กดู ลช้างออกทงขั้ ชทีัขร้
34 เซอรร์วิวส Spreadsheet
บททที่ 5
การจัดบ การแถว
หรรือคอลบมั น์ร
5.1. การแทรกแถว
insertRowAfter(afterPosition) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertrowafterafterposition
ใช้ชแทรก 1 แถว หลขงตาก แหนง่ช แถวทรี่รท ะบชใุ นพารามเลิ ตอรล์ afterPosition
ตวข อยา่ช ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
// แทรกแถวไว้ค ดคา้ นล่าต งของแถวททืช่ 1
sheet.insertRowAfter(1) ;
insertRowBefore(beforePosition) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertrowbeforebeforeposition
ใชชแ้ ทรก 1 แถว กอ่ช นตกาแหนงช่ แถวทรรที่ ะบใชุ นพารามเิล ตอร์ล beforePosition
insertRows(rowIndex) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertrowsrowindex
ใชแ้ช ทรกแถวว่ชาง 1 แถว ณ ตาก แหน่ชงทีรท่ร ะบชุ (แถวดาช้ นล่ชางถดูกเลีรอท่ นลง)
insertRows(rowIndex, numRows) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertrowsrowindex,-numrows
ใชช้แทรกแถววาช่ ง 1 หรรอหลายแถว ณ ตกาแหนชง่ ทีร่ทร ะบชุ (แถวด้าช นลา่ช งถดูกเล่รีทอนลง)
Name Type Description
rowIndex Integer ตาจ แหนงต่ ของแถว ทจืชท่ ะแทรกแถว
numRows Integer จาจ นวนแถวทท่ืจช ะแทรก
insertRowsAfter(afterPosition, howMany) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertrowsafterafterposition,-howmany
แทรกแถว 1 หรอร หลายแถว หลขงจากตกาแหนชง่ ททรีร่ ะบุช
Name Type Description
afterPosition Integer The row after which the new rows should be added.
howMany Integer The number of rows to insert.
insertRowsBefore(beforePosition, howMany) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertrowsbeforebeforeposition,-howmany
แทรกแถว 1 หรรอหลายแถว กชอ่ นตาก แหน่ชงทีท่รระบชุ
Name Type Description
beforePosition Integer The row before which the new rows should be added.
howMany Integer The number of rows to insert.
36 เซอรรว์ วิส Spreadsheet
5.2. การลบแถว
deleteRow(rowPosition) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#deleterowrowposition
ใชล้ช บแถว ณ ตาก แหน่ชงทรีทร่ ะบชใุ นพารามเิล ตอร์ล rowPosition
ตวข อยาช่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
// ลบแถวท่ืทช 1
sheet.deleteRow(1) ;
deleteRows(rowPosition, howMany) – เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#deleterowsrowposition,-howmany
ใชช้ลบแถว 1 หรรอหลายแถว ตามจาก นวนทรรีท่ ะบชุในพารามิลเตอรล์ howMany โดยเรลิท่ีมจากตกาแหน่ชงที่รทระบุชใน
พารามเลิ ตอร์ล rowPosition
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
// ลบแถวท่ืทช 1 ยาวไป 2 แถว
sheet.deleteRows(1, 2) ;
โดย วสันส ตต์ คุณค ดดิลกเศวต ([email protected]) 37
38 เซอร์วร วิส Spreadsheet
บททีท่ 6
เรช้นจ์ร
6.1. จบับเรน้ช จ์ร
เมร่อที จขบไปทรทชี่ ขีทรั้ ท่ทรีตอช้ งการได้แช ล้วช หากตอ้ช งการจขบตช่อไปทีรท่ เรนช้ จพ์ หรอร เซลลต์พ ต่างๆ สามารถทาก ไดช้โดยใช้ช
หลาย เมถอดในคลาส Range
6.2. getRange()
คลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range
getRange() ใชจ้ช ขบเรช้นจล์ โดยจะครนคาช่ กลขบมาเปน็ป วตข ถชุ Range
6.2.ก.) getRange(row, column)
getRange(row, column) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column
ใชช้จบร เร้นช จ์พเพยท ง 1 เซลลพ์ โดยระบุชเรช้นจเล์ ปป็นตวข เลขตกาแหนช่งแถวและคอลมข นล์ เช่ชน getRange(2, 3) กคก็ อร
แถวท่ที 2 คอลมวั น์รทที่ 3 (เซลล์ร C2) เปป็นตช้น
ตวข อยาช่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ; // จบสั ชี้ททช แรก
var range = sheet.getRange(1, 1) ; // จบัส เซลลต์ A1
var values = range.getValues() ; // จบัส คตา่ ในเซลล์ต A1 – แบบอาเรย์ต 2 มิตด ดิ
// var value = range.getValue() ; // จบสั ค่าต ในเซลลตเ์ ดยท วใชค้ getValue งาต่ ยกวาต่
Logger.log(values[0][0]) ; // พมดิ พต์ : (คา่ต ในเซลล์ต A1)
6.2.ข.) getRange(row, column, numRows)
getRange(row, column, numRows) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column,-numrows
ใช้จช บร เรน้ช จ์พ 1 คอลมร น์พ โดยระบชตุ ขวเลขตาก แหนงช่ เปป็น จดชุ เริม่ทีล แถว จดชุ เร่มิีทล คอลมข นล์ และจกานวนแถว
ตวข อยาช่ งการใชช้งาน
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
var range = sheet.getRange(1, 1, 3) ; // จสบั เรดิชื่มต้นค ท่ืชท A1 ยาวไป 3 แถว
var values = range.getValues() ; // จสับค่ตาในเรค้นจต์ - ไดม้ค าเปป็นอาเรย์ต 2 มดิตดิ
for (var row in values) { // วนลปย Log คาต่ ในเซลลต์ A1 ถถึง A3 - 3 คต่า
for (var col in values[row]) {
Logger.log(values[row][col]) ;
} // จบ for ใน
} // จบ for นอก
หมายเหตคุ : เมถอดตระกลูด วนลดปู ของอาเรย์ล เช่ชน forEach นลิยมใชเ้ช ข้ชาถึงท ขอช้ มลูด ในอาเรย์มล ากกวาช่ ลดูป for
40 เซอรร์ววสิ Spreadsheet
6.2.ค.) getRange(row, column, numRows, numColumns)
getRange(row, column, numRows, numColumns) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column,-numrows,-numcolumns
ใชจ้ช บข เรชน้ จแ์ล บบตารางขชอ้ มดูล โดยระบชุตวข เลขตาก แหนงช่ เปน็ป จุชดเรที่มลิ แถว จดชุ เร่มีทิล คอลมข น์ล จาก นวนแถว และ
จกานวนคอลมข นล์ ตามลาก ดขบ
ตวข อยชา่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
var range = sheet.getRange(1, 1, 3, 3) ; // จบสั เร่มิดืช ตนค้ ทืช่ท A1 ยาวไป 3 แถว 3 คอลมัส น์ต
var values = range.getValues() ; // จบัส คา่ต ในเร้คนจ์ต - ไดม้ค าเปน็ป อาเรยต์ 2 มติด ิด
for (var row in values) { // วนลยป Log คาต่ ในเซลลต์ A1 ถึถง C3 - ไดค้ 9 ค่าต
for (var col in values[row]) {
Logger.log(values[row][col]) ;
} // จบ for ใน
} // จบ for นอก
6.2.ง.) getRange(a1Notation)
getRange(a1Notation) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangea1notation
ใชจ้ช บข เรน้ช จล์ โดยระบพุช ารามเลิ ตอรล์ a1Notation เป็ปนสขญลขกษณล์ A1 Notation เชน่ช A5 หรอร A5:B10
เปปน็ ตชน้ หรอร สขญลกข ษณล์ R1C1 เช่นช R[1]C[2]
ตวข อยาช่ ง
// จสับเรคน้ จ์ต A1:D4 ทอท่ืช ยบต่ย นชีชทท้ "Invoices"
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var range = ss.getRange("Invoices!A1:D4") ;
// จัสบเร้นค จ์ต A1 ในชี้ทชทท่ืชท 1
var sheet = ss.getSheets()[0] ;
var cell = sheet.getRange("A1") ;
6.3. getLastRow() และ getLastColumn()
How to Get The Last Row - Google Sheets Apps Scripts - Array Methods Part 10
https://youtu.be/zWcNzLbJpb0?list=PLv9Pf9aNgemvD9NFa86_udt-NWh37efmD
getLastRow() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getlastrow
getLastColumn() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getlastcolumn
getLastRow() และ getLastColumn() ใชช้จบข แถวสดชุ ทา้ช ย หรรอ คอลขมนล์สุชดทา้ช ยของเร้ชนจ์ลทีท่รเราจขบไว้ช ตาม
ลกาดขบ โดยจะคนร คชา่ กลขบมาเปป็น เลขจาน นวนเต็อม แถวทที่ หรอช คอลรมนทพ์ ีท่
โดย วสัสนตต์ คคุณดลิด กเศวต ([email protected]) 41
ตวข อยาช่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
var range = sheet.getRange("B3:D10") ;
var lr = range.getLastRow() ;
var lc = range.getLastColumn() ;
Logger.log(lr + " " + lc) ; // พมดิ พต์ : 10 4
6.4. getA1Notation()
getA1Notation() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#geta1notation
getA1Notation() ใชชจ้ บข ตกาแหนง่ช ของเร้นช ตล์ทรีท่เลอร กหรอร ระบุช แล้วช คนร คา่ช กลบข มาเปนป็ ตกาแหน่งช ของเรน้ช จใล์ นรูปด
แบบ A1 Notation เชช่น A2:G20 เป็นป ต้นช
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
var range = sheet.getRange(1, 1, 2, 5) ;
Logger.log(range.getA1Notation()) ; // พมดิ พ์ต : A1:E2
6.5. getCell()
getCell(row, column) - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getcellrow,-column
ใชจช้ ขบ 1 เรนช้ จท์ล รทร่ี ะบุช โดยจะครนคช่ากลบข มาเปป็นวตข ถุช Range ของ 1 เซลล์ล
ตวข อยาช่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
var range = sheet.getRange("B2:D4") ;
// จบัส เซลลต์ตาจ แหนงต่ 1,1 ในเรน้ค จต์ B2:D4 กจ็คอืม จสับไปททเ่ชื ซลลต์ B2
var cell = range.getCell(1, 1) ;
Logger.log(cell.getValue()) ;
หมายเหตคุ
getCell() ใชจ้ช บข เซลลใล์ นเร้นช จตล์ อช่ ไดด้ช ว้ช ย เชน่ช
sheet.getRange("A1:D1").getCell(1,1) ; // จบัส เรน้ค จต์ A1 เซลลเ์ต ดยท ว
sheet.getRange("A1:D1").getCell(1,2) ; // จสบั เร้นค จ์ต A2 เซลลต์เดยท ว
42 เซอรวร์ วสิ Spreadsheet
6.6. getDataRegion()
6.6.ก.) getDataRegion()
getDataRegion() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getdataregion
getDataRegion() ใชช้จขบเรชน้ จท์ล ี่อรท ยดตู่ช ดิล กบข เซลลทล์ ีร่เท ราเลอร ก คลาช้ ยกบข เลรอกบางเซลลล์ไวช้ เชช่นเลอร ก B2 จากน้นขั
กด <Ctrl><A> อาณาเขตการเลอร กจะขยายออกไปครอบคลุมช เซลลทล์ ีมรท่ ีรข้ชอมูลด ทอรีท่ ยต่ชูด ดิล กขบ B2 ดวช้ ย
ตวข อยา่ช งขอช้ มดลู
ตวข อยช่างการใชง้ช าน
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0] ;
var Region_1 = sheet.getRange("B2").getDataRegion().getA1Notation() ;
var Region_2 = sheet.getRange("H8").getDataRegion().getA1Notation() ;
Logger.log(Region_1) ; // พมดิ พต์ : A1:D4
Logger.log(Region_2) ; // พมดิ พ์ต : F6:I9
6.6.ข.) getDataRegion(dimension)
getDataRegion(dimension)
https://developers.google.com/apps-script/reference/spreadsheet/range#getdataregiondimension
getDataRegion(dimension) ใชจช้ บข เรนช้ จล์ทอีร่ท ยช่ตดู ดิล กบข เซลลลท์ ่ทีรเราเลอร ก โดยสามารถเลรอกทลิศทางไดก้ช าร
ขยายเรช้นจ์ลไดช้ getDataRegion(dimension) คนร คา่ช กลบข มาเป็นป คลาส Range โดยพารามลเิ ตอรล์ dimension ก็คก รอ
Enum Direction(ใชไ้ช ม่ไท ด้ช) หรอร Enum Dimension
Enum Direction – การเรทยกใชค้งานเชน่ต SpreadsheetApp.Direction.DOWN เปนป็ ตน้ค
https://developers.google.com/apps-script/reference/spreadsheet/direction#UP
Property Type Description
UP Enum The direction of decreasing row indices.
DOWN Enum The direction of increasing row indices.
PREVIOUS Enum The direction of decreasing column indices.
NEXT Enum The direction of increasing column indices.
โดย วสสนั ตต์ คณคุ ดดิลกเศวต ([email protected]) 43
Enum Dimension – การเรทยกใชค้งานเช่ตน SpreadsheetApp.Dimension.COLUMNS เปนป็ ต้นค
https://developers.google.com/apps-script/reference/spreadsheet/dimension
Property Type Description
COLUMNS Enum The column (vertical) dimension.
ROWS Enum The row (horizontal) dimension.
ตวข อยาช่ ง
// แรกเรืิ่มชด กตอ่ นรนัส โคคด้ ช้ชทีท ไมมต่ ขท คอ้ มลย ใดๆ
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
// กรอกขอ้ค มยลลงในเซลลต์ต ่ตางๆ 4 เซลล์ต
sheet.getRange("C2").setValue(100) ;
sheet.getRange("B3").setValue(100) ;
sheet.getRange("D3").setValue(100) ;
sheet.getRange("C4").setValue(100) ;
Logger.log( // Logs "C2:C4"
sheet.getRange("C3").getDataRegion(SpreadsheetApp.Dimension.ROWS).getA1Notation()
);
Logger.log( // Logs "B3:D3"
sheet.getRange("C3").getDataRegion(SpreadsheetApp.Dimension.COLUMNS).getA1Notation()
);
6.7. getDataRange()
getDataRange() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getdatarange
ใชจช้ ขบข้ชอมูดลทีทมร่ ีรในชีัท้ขร ตัข้งแตชม่ มุช ซ้ชายบนที่รทมรีขช้อมลดู ไปจนถทึงมุมช ขวาลา่ช งทท่รีมขีร ้ชอมลดู ตวข สดุช ทช้าย
getDataRange ใหชผ้ ลเหมรอนกขบโคด้ช นัข้รี getRange(1,1,sheet.getLastRow(),sheet.getLastColumn())
ตวข อยา่ช ง
ตารางข้อช มดูลใน Google Sheet มดีร ขงตอ่ช ไปนรัี้ข
44 เซอรรว์ ิวส Spreadsheet
โค้ดช ตอ่ช ไปนีัขร้ Logs ข้ชอมดลู ท้ขงั หมดทรีมท่ ใีร นชทีร้ขั ออกมาดดู
var ss = SpreadsheetApp.getActive() ; // ไฟล์ปต ฝจั จุคบนสั
var sheet = ss.getActiveSheet() ; // ชทช้ที ทเ่ืชท ปดิป
var data = sheet.getDataRange() ; // เรน้ค จขต์ คอ้ มลย
var values = data.getValues() ; // ขอค้ มยลในช้ททชี ทสชีัง้ หมด
Logger.log(values) ; // ดผย ลทชื่ท Logs ------------------- > [ 01 ]
ผล
Logs
[ 01 ] [ [ Fruit, Cost, Quantity ],
[ Apple, 15, 200 ],
[ Bananas, 50.0, 520.0 ],
[ Mangoes, 20, 1025 ],
[ Durian, 150, 50 ],
[ Longan, 60, 450 ]]
อกีร ตขวอยช่าง ต่ชอเนร่ีทองจากตขวอยช่างก่ชอนหนช้า - ยาช้ ยขอ้ช มูดลออกมา ใหช้มีรแถววาช่ งและคอลขมน์ลว่ชางท่รีทดช้านซ้ชาย
และดาช้ นบน
Logs ขชอ้ มดูลในรูดปแบบ CSV ขน้ขั ดว้ช ย " , " (คอมมตา่ )
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheets()[0] ;
var range = sheet.getDataRange() ;
var values = range.getValues() ;
for (var i = 0; i < values.length; i++) {
var row = "" ;
for (var j = 0; j < values[i].length; j++) {
if (values[i][j]) {
row = row + values[i][j] ;
}
row = row + "," ;
}
Logger.log(row) ; // Log ขค้อมลย ในรปย แบบ CSV ขชัสีน้ ดดค้วย , (คอมมาต่ )
}
โดย วสันส ตต์ คคณุ ดลดิ กเศวต ([email protected]) 45
ผล
Logs
[01] ,,,,
[02] ,,,,
[03] ,Fruit,Cost,Quantity,
[04] ,Apple,15,200,
[05] ,Bananas,50,520,
[06] ,Mangoes,20,1025,
[07] ,Durian,150,50,
[08] ,Longan,60,450,
หมายเหตคุ :
เม่รีทอใช้ช getDataRange() จขบข้ชอมูดลในช้ขรัีทแล้ชว มขกจะใช้ชอาเรยล์เมถอด เชช่น shift(), splice() หรรอ slice()
ตดข ข้อช มูดลทรี่ทไมช่ต้ชองการออกไป เช่ชน ตดข หวข ตาราง จากนัขน้ จะเหลอร เฉพาะสว่ช นทรที่ตอ้ช งการ
6.8. getValue() และ getValues()
getValue() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getvalue
ใชจช้ บข ค่ชาในเรชน้ จลท์ ม่ีทร ุมช ซ้าช ยบน(จบข มาคาช่ เดรียว) คา่ช ในเรน้ช จล์ทท่รจี บข สามารถเปน็ป ตวร เลข, บูลส ลนท , ข้อช ความ
เปป็นตน้ช หากเซลล์ลวชา่ งสีท่ิงล ทจที่ร บข มาไดชจ้ ะเปป็น ขชอ้ ความวาต่ งๆ
ตวข อยา่ช ง
var valInA1 = SpreadsheetApp.getActiveSheet().getRange(1, 1).getValue() ;
getValues() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues
ใชจช้ บข คาช่ ในเรช้นจท์ล ร่ีรท ะบุช คาช่ ที่ทคร รนกลบข มาเป็ปนอาเรยล์ 2 มตลิ ิล (แม้ชจะจขบไปทรีท่เซลลล์เดีรยวกก็ตาม) สามารถระบชุ
ตาก แหน่งช ภายในอาเรย์ลไดด้ช งข น้รขัี getValues()[i][j]
ตวข อยาช่ ง
// จบัส คตา่ ในเร้คนจต์ C2:G8
var values = SpreadsheetApp.getActiveSheet().getRange(2, 3, 6, 4).getValues();
Logger.log(values[0][0]) ; // ดคย ่ตาในอาเรยตต์ สัวแรกตวัส เดยท ว
46 เซอรร์วิสว Spreadsheet
6.9. getDisplayValue() และ getDisplayValues()
getDisplayValue() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getdisplayvalue
ใช้ชจบข คช่าตามทแ่ีทร สดงใหช้เหก็นในเรน้ช จล์ โดยจขบทีทมร่ ุมช ซ้าช ยบน(จขบมาคชา่ เดียร ว) โดยจะคนร คาช่ กลขบมาเปป็น String
getDisplayValues() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getdisplayvalues
ใชช้จบข คาช่ ตามท่ีทรแสดงให้ชเหก็นในเรช้นจ์ล โดยจะคนร ค่ชากลบข มาเปป็น String[][]-อาเรย2์ต มตดิ ทดิ ม่ทืช ทขอ้ค มลย เปนป็ String
ตวข อย่าช ง - ตารางข้ชอมูดลมีรดงข ตอช่ ไปนรัข้ี
โคช้ด
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1') ;
var values = sheet.getRange('C1:C2').getValues() ;
Logger.log(values) ; // พมิด พต์ : [[10.0], [10.5]]
var displayValues = sheet.getRange('C1:C2').getDisplayValues() ;
Logger.log(displayValues) ; // พดมิ พ์ต : [[฿10.00], [฿10.50]]
6.10. จบับ เรช้นจ์รจากชี่ทอช เรน้ช จร์ (Named ranges)
Retrieve a named range from a spreadsheet
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#retrieve-a-named-range-from-a-spreadsheet
6.10.ก.) getRangeByName()
getRangeByName(name) – เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getrangebynamename
ใชช้จขบเรช้นจลจ์ าก ชอที่ช เรนช้ จ์ร(Named Range) พารามิลเตอรล์ name เปนป็ ชีรทอ่ ของเร้ชนจ์ล
ชี่อทช เร้ชนจ์ร หรรอ Named Range เมอ่ีรท เรมลท่ีิ ตนช้ ใช้งช าน Google Sheets จะยงข ไมช่มีร แตเ่ช ราสามารถสราช้ ง Named
Range หรอร ตั้งร ชีท่ชอใหก้ช รบเรนช้ จ์พ ได้ทช ีทเ่ร มนดู Data → Named Ranges (ตวข อยา่ช งตามภาพถขดไป)
โดย วสสนั ตต์ คคณุ ดดิลกเศวต ([email protected]) 47
การตัข้งชรี่อท เรชน้ จ์ล ทกาให้ชเราสามารถเขา้ช ถึงท เร้นช จล์ได้งช าช่ ยจากชอี่รท ของเรช้นจล์ เชนช่ sum(NamedRange) เปป็นตช้น
โคด้ช ตอ่ช ไปน้ัขรี ดงึท ขช้อมดูลของเร้ชนจ์ล จากชทรอ่ี ของเร้ชนจ์ล(Named Range) ออกมา Log ดดู
var ssID = 'Your Google Sheets ID' ; // จบสั เรคน้ จต์ชม่ืชอ Test
var ss = SpreadsheetApp.openById(ssID) ;
// พมดิ พ์ต : 4.0
var range = ss.getRangeByName('Test') ; // พมิด พ์ต : 9.0
// พมิด พ์ต : B4:E12
if (range != null) { // พมดิ พ์ต : ชอีทช่ ชทท้ัข
Logger.log(range.getNumColumns()) ;
Logger.log(range.getNumRows()) ;
Logger.log(range.getA1Notation()) ;
Logger.log(range.getSheet().getName()) ;
} // Close – if
6.10.ข.) getNamedRanges()
getNamedRanges() - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getnamedranges
ใชจ้ช ขบ Named Ranges ในไฟลล์ Google Sheets โดยคนร คา่ช กลบข มาเปป็น NamedRanged[]-วัตว ถทุ
NamedRange ในอาเรยร์
getNamedRanges() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getnamedranges
ใชช้จขบ Named Ranges ในชข้รัทใดๆ โดยครนคช่ากลขบมาเป็ปน NamedRanged[]-ววัตถุท NamedRange ในอา
เรยร์
48 เซอรวร์ ิสว Spreadsheet
ตวร อยา่ต งทที่ 1 – จขบ Named ranges ในไฟล์ล Google Sheets มา Logs ดูขด ้อช มลดู
var ssID = 'Your Google Sheets ID' ;
var ss = SpreadsheetApp.openById(ssID) ;
var nrange = ss.getNamedRanges() ; // พมดิ พต์ : [NamedRange]
Logger.log(nrange) ;
nrange.forEach(function(nr){
Logger.log(nr.getName()) ; // พมดิ พ์ต : Test – ชมอ่ืช Name range
Logger.log(nr.getRange().getA1Notation()) ; // พดมิ พ์ต : B4:E12 – เร้คนจต์ของ Name range
}) ;
ตวร อยาต่ งท่ีท 2 – จบข Named ranges ในช้ทรขีั ทรท่ีร ะบุช มา Logs ดชดู ่ีทรอ Named range ตวข แรก
// The code below logs the name of the first named range.
var namedRanges = SpreadsheetApp.getActiveSheet().getNamedRanges() ;
if (namedRanges.length > 1)
{
Logger.log(namedRanges[0].getName()) ;
}
6.10.ค.) setNamedRange()
setNamedRange(name, range) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#setnamedrangename,-range
ใชช้สราช้ ง Named Range
พารามลิเตอร์ล
Name Type Description
name String ชอ่ืมช ทช่ืทจะใช้คต้สังีช เปป็นชอมืช่ ของ Named Range
range Range วสตั ถุเค รนค้ จต์
ตวข อย่ชางทรท่ี 1 – สราช้ ง Named range จากเร้นช จทล์ ีใทร่ ชช้เมชา้ สเ์ล ลอร ก
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
ss.setNamedRange("foo", ss.getActiveRange()) ;
ss.removeNamedRange("foo") ;
ตวข อยชา่ งทร่ที 2 – สรชา้ ง Named range จากเรชน้ จ์ล D4:D10 ชั้ทรขี Sheet2
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setNamedRange("NameRangeX",ss.getSheetByName('Sheet2').getRange('D4:D10')) ;
โดย วสสันตต์ คคุณดดลิ กเศวต ([email protected]) 49
6.10.ง.) removeNamedRange()
removeNamedRange(name) - เมถอดในคลาส Spreadsheet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#removenamedrangename
ใชล้ช บ Named Range พารามลเิ ตอร์ล name กค็ก รอชอร่ีท Name Range ทจรีท่ ะลบ
ตวข อยาช่ ง
ss.removeNamedRange('Test') ;
6.10.จ.) setRange() และ setName()
setRange(range) - เมถอดในคลาส NamedRange
https://developers.google.com/apps-script/reference/spreadsheet/named-range#setrangerange
ใช้ชเซก็ตหรรออพข เดทเร้นช จล์ใหชก้ บข Named range ทีทร่ร ะบชุ โดยครนค่ชากลบข มาเปน็ป Named range ตวข เดิมล
setName(name) - เมถอดในคลาส NamedRange
https://developers.google.com/apps-script/reference/spreadsheet/named-range#setnamename
ใชชเ้ ซก็ตหรอร อพข เดทชอ่ทรี ใหม่ชใหก้ช ขบ Named range ทรี่ทร ะบชุ โดยคนร คาช่ กลขบมาเปป็น Named range ตวข เดมิล
ตวข อยาช่ ง
var ss = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = ss.getSheetByName('Sheet1') ;
var range1 = sheet.getRange('A1:D1') ;
var range2 = sheet.getRange('A1:D13') ;
// สรา้ค ง Named range
ss.setNamedRange("DataHeader", range1) ;
var NameRangesAll = ss.getNamedRanges() ;
NameRangesAll.forEach(function(nr){ // ดผย ลทื่ชท Logs ------- > (1.)
Logger.log(nr.getName()) ; // ดผย ลท่ืชท Logs ------- > (2.)
Logger.log(nr.getRange().getA1Notation()) ;
}) ;
NameRangesAll.forEach(function(nr){
// แก้คเร้คนจ์ใต หก้ค บสั Named range ชอมชื่ DataHeader
// และเปลยทช่ื นชชืมอ่ Named range เปนป็ DataTable
if(nr.getName() == 'DataHeader')
{
nr.setRange(range2) ; // เซ็ตจ เรค้นจ์ใต หมต่
Logger.log(nr.setName('DataTable').getName()) ; // ดผย ลท่ืชท Logs ------- > (3.)
Logger.log(nr.getRange().getA1Notation()) ; // ดยผลทท่ชื Logs ------- > (4.)
}
})
50 เซอรว์ร ิสว Spreadsheet