ยกตัวอย่างการเขียนโปรแกรมด้วย google apps script

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

JavaScript cloud scripting language for task automation

Google Apps Script คือวิธกี ารส่ังงาน Google
Apps โดยการเขยี นโปรแกรม (ใชฐ้ านจาก javaScript)

Google Apps Script เขียนได้งา่ ย สามารถเขียนบน Browser ได้เลยโดยไม่ต้อง
ลงโปรแกรมใดๆ และ Script จะถกู host และ run บน server ของ Google ดังนั้น
จึงสามรถพัฒนาและใชง้ านได้บนเครอ่ื งคอมพิวเตอรท์ กุ แบบ ไมว่ ่าจะเป็น PC Mac
Chromebook หรอื แมแ้ ต่บน Smartphone หรอื Tablet

Apps Script แบง่ เป็น 3 ประเภท คือ

1.Standalone Scripts
Script ที่อยูเ่ ด่ียว ๆ ไม่ผูกกับ google apps (แต่สามารถเรยี กใช้ Google Apps ได้)
และจะปรากฏให้เหน็ บน Google Drive เหมอื นไฟล์อน่ื ๆ

2.Scripts Bound to Google Sheets, Docs, or Forms
Script ประเภทนี้จะสรา้ งข้นึ จากไฟล์ Google Apps อนื่ เชน่ Sheets, Forms และจะผูก
อยูก่ ับไฟล์นั้นเป็นส่วนหน่ึงของไฟล์น้ัน ดังน้ันเราจะไมเ่ ห็นมันอยูใ่ น Drive ของเรา
3.Web Apps and Google Sites Gadgets
ถ้าเราสรา้ ง User Interface ให้ Script ของเรา (เช่น html + css) เราก็สามารถ
publish เป็น web apps ได้ โดย ผูใ้ ช้งานสามารถเรยี กใชง้ านไดโ้ ดยตรงผ่าน browser
เชน่ เดียวกับ web apps ทั่วไป

เรม่ิ ต้นเรยี กใช้ Service Spreadsheet

การสรา้ ง แกไ้ ข หรอื เขา้ ถึง Spreadsheet

จะเรม่ิ ตน้ จากการใช้คลาส SpreadsheetApp
จากน้ันจึงจะเรยี กคลาสย่อยต่อไปเรอื่ ย ๆ
จนกวา่ จะถึงคลาสท่ีเราต้องการจะใชง้ าน

ตอนที่ 1 การจบั ไฟล์ท่ีกาลัง Active

1.คาสงั่ getActiveSpreadsheet

ใชจ้ ับไฟล์ Google Sheet โดยจะคืนค่าออกมาเป็นคลาส Spreadsheet

*คาสัง่ นใ้ี ช้กับ Google App Script ทเ่ี ขยี นบน Google Sheet ไมใ่ ช่ Google App Script แบบ Stand Alone

ตัวอยา่ ง

function myFunction() {
Logger.log(SpreadsheetApp.getActiveSpreadsheet().getUrl());
}

ตอนท่ี 1 การจับไฟล์ที่กาลัง Active
สิง่ ท่ีควรทราบ..เกย่ี วกับ Google Sheet

ตอนท่ี 1 การจบั ไฟล์ท่ีกาลัง Active

2.คาสง่ั getId, getUrl , getName

ตัวอย่าง
function myFunction() {
var ss = SpreadsheetApp.getActive();
var url = ss.getUrl();
var id = ss.getId();
var name = ss.getSheetName();
}

ตอนที่ 2 การสรา้ งไฟล์ใหม่

ตวั อยา่ ง การสรา้ ง Spreadsheet ด้วย App Script

function myFunction() {
var sheetNew = SpreadsheetApp.create("neno");

}

ตอนที่ 3 การเปิดไฟล์

คาสง่ั openById, openByUrl

เป็นคาสั่งที่ใชใ้ นการเปิดไฟล์ โดยอา้ งถึง id หรอื url ก็ได้
เช่น
var ss = SpreadsheetApp.openByUrl(url);

หรอื

var ss = SpreadsheetApp.openById(id);

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

สว่ นประกอบต่างๆ ของสเปรตชตี

ลาดับการจดั การข้อมูล
1 SpreadsheetApp

2 URL ,ID ,activeSpreadSheet

3 sheetByName ,activeSheet,sheets

4 Cell ,row ,column , range

50

5 setValue getValue
ดึงค่าออกมาใช้
ใส่ค่าลงไป

การจบั เวริ ก์ ชตี และแผน่ งาน

การจบั Spreadsheet(สเปรตชตี )

แบบที่ 1 SpreadsheetApp.getActive () เวิรก์ ชตี ที่กาลังใชง้ าน
แบบที่ 2 SpreadsheetApp.getActiveSpreadsheet() เวริ ก์ ชตี ที่กาลังใชง้ าน
แบบที่ 3 SpreadsheetApp.openByUrl("url") url ของเวริ ก์ ชตี ที่กาลังใชง้ าน
แบบที่ 4 SpreadsheetApp.openId("id") id ของเวิรก์ ชตี ท่ีกาลังใช้งาน

การจบั sheet (แผ่นงาน)

แบบที่ 1 getActiveSheet() แผ่นงานท่ีกาลังใชง้ าน
แบบที่ 2 getSheetName() ชอื่ แผ่นงานท่ีกาลังใชง้ าน
แบบท่ี 3 getSheetByName("ชื่อชีต") ชอ่ื แผ่นงานท่ีกาลังใชง้ าน
แบบท่ี 4 getSheets() แผ่นงานทุกแผ่นท่ีกาลังใชง้ าน

การจบั แผน่ งาน แบบแผ่นเดยี ว

แบบที่ 1 var ss = SpreadsheetApp.getActiveSpreadsheet() เวริ ก์ ชตี ท่ีกาลังใชง้ าน
var sheet = ss.getActiveSheet() แผ่นงานท่ีกาลังใชง้ าน

แบบท่ี 2 var ss = SpreadsheetApp.openByUrl("url") url ของเวริ ก์ ชตี ท่ีกาลังใช้งาน
var sheet = ss.getSheetByName("ช่ือชีต") ระบุชอ่ื แผ่นงาน

แบบที่ 3 var ss = SpreadsheetApp.openById("id") id ของเวริ ก์ ชตี ที่กาลังใชง้ าน
var sheet = ss.getSheetByName("ช่ือชีต") ระบุชอ่ื แผ่นงาน

แบบที่ 4 var sheet = SpreadsheetApp.openById("id").getSheetByName("ชื่อชีต");

แบบที่ 5 var sheet = SpreadsheetApp. getActiveSpreadsheet(). getActiveSheet()

การจบั แผน่ งาน แบบหลายแผน่

var ss = SpreadsheetApp.getActiveSpreadsheet() เวริ ก์ ชตี ท่ีกาลังใชง้ าน
var sheet = ss.getSheets() แผ่นงานทุกแผ่น

var ss = SpreadsheetApp.openByUrl("url")
var sheet = ss.getSheets()แผ่นงานทุกแผ่น
var sheet1 = ss.getSheets ()[0]แผ่นงานท่ี 1

การจบั ขอ้ มูลในแผน่ งานดว้ ย Range

แบบที่ 1 จบั เซลล์เดียว
getRange(row column)

var ss = SpreadsheetApp.getActiveSpreadsheet() เวริ ก์ ชตี ท่ีกาลังใชง้ าน
var sheet = ss.getActiveSheet() แผ่นงานท่ีกาลังใช้งาน
var range = sheet.getRange(1,1);

จบั ค่าแบบท่ี 1 var data = range.getValue(); จบั ค่าในเซลล์ A1 ค่าเดียว
จับค่าแบบท่ี 2 var data = range.getValues(); จับค่าในเซลล์ A1 แบบอะเรย์ 2 มติ ิ

การจบั ขอ้ มูลในแผน่ งานด้วย Range

แบบท่ี 2 จับหลายแถว
getRange(row column numRows)

row= จุดเรมิ่ แถว column=จุดเรม่ิ คอลัมน์ numRows=จานวนแถว

var ss = SpreadsheetApp.getActiveSpreadsheet() เวริ ก์ ชตี ท่ีกาลังใชง้ าน
var sheet = ss.getActiveSheet() แผ่นงานที่กาลังใช้งาน
var range = sheet.getRange(1,1,5);

วธิ กี ารดึงค่าออกมา var data = range.getValues();

การจบั ขอ้ มูลในแผน่ งานด้วย Range

แบบท่ี 3 จบั แบบตารางขอ้ มูล
getRange(row column numRows numColumns)

row= จุดเรมิ่ แถว column=จุดเรมิ่ คอลัมน์ numRows=จานวนแถว numColumns=จานวนคอลัมน์

var ss = SpreadsheetApp.getActiveSpreadsheet() เวิรก์ ชตี ท่ีกาลังใช้งาน
var sheet = ss.getActiveSheet() แผ่นงานท่ีกาลังใชง้ าน
Var range = sheet.getRange(1,1,5,3);

วธิ กี ารดึงค่าออกมา var data = range.getValues();

การจบั ขอ้ มูลในแผน่ งานดว้ ย Range

แบบที่ 4 จบั แบบสัญลักษณ์
getRange(a1Notation)

ระบุเรน้ จ์เป็นสญั ลักษณ์ เชน่ A5 หรอื A5:B10 หรอื R[1]C[2]

var ss = SpreadsheetApp.getActiveSpreadsheet() เวิรก์ ชตี ที่กาลังใช้งาน
var sheet = ss.getActiveSheet() แผ่นงานท่ีกาลังใชง้ าน

var range = sheet.getRange("แผน่ 1"!A1:D4);
หรอื var cell = sheet.getRange("A1");

การจบั ขอ้ มูลแถวสดุ ท้าย คอลัมน์สดุ ทา้ ย

getLastRow() getLastColumn()

จับแถวสุดท้ายของเรน้ จ์ จบั คอลัมน์สุดท้ายของเรน้ จ์

var ss = SpreadsheetApp.getActiveSpreadsheet() เวริ ก์ ชตี ที่กาลังใชง้ าน
var sheet = ss.getActiveSheet() แผ่นงานที่กาลังใชง้ าน

var " = sheet.getRange("B3:D10");

var lr = rang.getLastRow();
var lc = rang.getLastColumn();

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

การกาหนดเรนจแ์ บบตา่ งๆ ท่ีควรรู้

แบบที่ 1 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
แบบที่ 2 var data = ss.getRange(1,1).getValue();
แบบที่ 3
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getRange(1,1,1,4).getValues();

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getRange(1,1,ss.getLastRow,ss.getLasColumn).getValues();

แบบท่ี 4 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getDataRange().getValues();

แบบท่ี 5 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getRange(ss.getLastRow , 1 , 1 , ss.getLasColumn).getValues();

การดึงขอ้ มูลแบบเซลล์เดยี ว

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getRange(1,1).getValue();

การดึงขอ้ มูลแบบแถวเดยี ว

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var data = ss.getRange(1,1,1,4).getValues();

var data1 = data[0][0]; =10 Col-index 3
var data2 = data[0][1]; =33 01 2

var data3 = data[0][2]; =12 0
var data4 = data[0][3]; =40 Row-index 1

2

3

การดึงขอ้ มูลแบบตาราง

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var data = ss.getRange(1,1,5,4).getValues();

var data1 = data[0][0]; =10 Col-index 3
var data2 = data[1][1]; =21 01 2

var data3 = data[2][2]; =12 0
var data4 = data[4][2]; =40 Row-index 1

2

3

4

เมอื่ มขี อ้ มูลเพม่ิ ใหม่
กใ็ ห้ดึงขอ้ มูลในแถวสดุ ท้ายในตารางเสมอ

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var range = ss.getRange(ss.getLastRow , 1 , 1 , ss.getLasColumn).getValues();

var data = range[0]; Col-index 3
var data1 = data[0]; =28 01 2
var data2 = data[1]; =59
var data3 = data[2]; =56 Row-index
0

var data4 = data[3]; =24 1
2

3

แบบที่ 2 4

var data = ss.getRange(ss.getLastRow , 1 , 1 , ss.getLasColumn).getValues()[0];

การดึงขอ้ มูลท้ังหมดโดยการวนลปู For

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = ss.getRange(ss.getLastRow , 1 , 1 , ss.getLasColumn).getValues()[0];

for (var i=0; i<data.length; i++){ Col-index 3
Logger.log(data[i]); 01 2
}
Row-index
0
1
2
3
4

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

มอื ใหม.่ .เรม่ิ ตน้ เรยี นรู้ อภวิ ฒั น์ วงศก์ ณั หา

การเขียน Function ใน Google App Script

1.แบบ Function ทั่วไป 2.แบบ Arrow Function

1 function test(){ 2 const test=()=>{
คาสั่ง คาสั่ง
}
}

var เปน็ ตัวแปรแบบ function-scope เปน็ ตัวแปรทใ่ี ช้ได้ทง้ั ฟังก์ชั่น
ส่วน const , let เปน็ ตวั แปรระดบั block-scope มีผลแคใ่ นบล็อกทป่ี ระกาศเทา่ นนั้ *const แกไ้ ขไม่ไดอ้ กี *

3 3.Function แบบมีพารามเิ ตอร์ เขียนแบบส้ันๆ

const sum=(a,b)=>{ const test=()=>{ const sum=(a,b)=>a+b
return a+b let c = sum(5,3) let c = sum(5,3)
} }
1.สร้างฟงั กช์ น่ั 2.นาไปใชง้ าน เขียนแบบรวบเหลอื เพยี งฟงั กช์ น่ั เดยี ว

ARRAY คือ อะไร

Array คือ เป็นชนิดของขอ้ มูลประเภทหน่ึง ใชส้ าหรบั เก็บค่าหลายค่า ไวใ้ นตัวแปรเดียว ข้อมูล

แต่ละตัวของอารเ์ รยจ์ ะเรยี กวา่ อลี ีเมนต(์ Element) และข้อมูลแต่ละอลี ีเมนต์จะมีหมายเลข

เพื่อใชใ้ นการอา้ งองิ ถึง เรยี กตัวเลขนี้ วา่ เลขดชั นี (Index)

index Numbers element

0 2 Numbers[0]

var Numbers = [2,3,5,8] 1 3 Numbers[1]

2 5 Numbers[2]

Array 1 มิติ 3 8 Numbers[3]

ARRAY 2 มติ ิ

เป็นตัวแปรชดุ ที่มีการจัดการขอ้ มูล Row (แถว) , Column (หลัก) ซง่ึ อยูใ่ นรปู แบบตาราง
ท่ีมแี สดงตาแหน่ง 2 ตัว

Array 2 มติ ิvar Numbers = [[2,4],[3,1],[5,7],[8,9]]

0Numbers[0][0]=2 0 1

2 4 Numbers[0][1]=4

1Numbers[1][0]=3 3 1 Numbers[1][1]=1

2Numbers[2][0]=5 5 7 Numbers[2][1]=7

3Numbers[3][0]=8 8 9 Numbers[3][1]=9

Numbers

คาสั่งที่ควรรใู ้ นการจดั การขอ้ มูลใน ARRAY

length ใชน้ ับจานวนขอ้ มูลที่มใี น array

toLocalString() ใชแ้ สดงขอ้ มูลใน array

join() ใชร้ วมขอ้ ความท้ังหมดใน array ให้เป็นขอ้ ความเดียว

concat() ใชร้ วม array 2 ตัว ให้เป็น array ตัวเดียว

slice() ใชเ้ ลือกขอ้ มูลใน array

sort() ใชจ้ ดั เรยี ง ขอ้ มูลใน array จากน้อยไปมาก

reverse() ใชส้ ลับขอ้ มูลใน array จากหลังมาหน้า จากหน้าไปหลัง

splice() ใชล้ บและเพิ่มขอ้ มูลเขา้ ไปในตาแหน่งท่ีกาหนด

push() ใชเ้ พ่ิมขอ้ มูลลงใน array ในลาดับสุดท้าย

pop() ใชด้ ึงขอ้ มูลในลาดับสุดท้ายออกจาก array

unshift() ใชเ้ พ่ิมขอ้ มูลลงใน array ในลาดับแรก

shift() ใชด้ ึงขอ้ มูลในลาดับแรกสดุ ของ array ออกมา

1. For-Loop

ฟังชน่ั for loop จะมหี น้าท่ีเอาไวว้ นลปู เพ่ือนาค่าใน Array ออกมาแสดงผลลัพธ์

รูปแบบคาส่ัง for(ค่าเรมิ่ ตน้ ;เงอ่ื นไข;การเพ่ิมคา่ ) {
ชุดคาส่ัง;
Numbers
}

2 for (var i = 0; i < Numbers.length; i++) {

Logger.log(Numbers[i])}

3

Logger.log(Numbers[i])

5 [2,3,5,8]

8

2. ForEach (กรณีท่ีใช้กับ ขอ้ มูลชุดเดียว)

ฟังชนั่ ForEach จะมีหน้าที่เอาไวว้ นลปู เพ่ือนาค่าใน Array แต่ละตัวมากระทา
ตามใน Function ท่ีเรากาหนดการทางานเอาไว้ โดย ForEach น้ัน ไมส่ ามารถ
Return ผลลัพธ์ ออกมาได้ ถ้า Return ออกมาจะเป็น undefined

Numbers Numbers.forEach(item=>{
Logger.log(item) })

2

3

Logger.log(item)

5

8

2. ForEach (กรณีท่ีใชก้ ับ Array 2 มติ ิ ข้อมูลแบบตาราง)

รปู แบบ : array.forEach(function(item, index, rows)

Numbers var Numbers = [[2,4],[3,1],[5,7],[8,9]]

item Number.forEach(function(item){
Item[0] Item[1]
1 Logger.log(item)
02 4
})
13 1
Array 2 มติ ิNumber.forEach( (item)=>{
25 7
2 Logger.log(item[0], item[1])

})

38 9 3 Number.forEach( item=>{
Logger.log(item[0], item[1])

})

3. Map (กรณีท่ีใช้กับข้อมูลชุดเดียว)

จะคล้ายกับ ForEach คือค่าใน Array แต่ละตัวจะทาการนาไปผ่าน Function ท่ี

เรากาหนดไว้ แต่ Map น้ัน สามารถ return ค่าออกมาไดโ้ ดยค่าท่ี return

ออกมาจะเป็น Array ซ่งึ สามารถนาไปทาใน Method อน่ื ได้

Numbers var result = Numbers.map(item=>{ result
2 return item*2 })
Logger.log(result) 4,6,10,16 4

item return

36

item*2

5 10

8 16

2. Map (กรณีท่ีใชก้ ับ Array 2 มิติ ขอ้ มูลแบบตาราง)

var Numbers = [[2,4],[3,1],[5,7],[8,9]]

Numbers แมปข้อมลู ท้ังหมด
item
Item[0] Item[1] var result = Numbers.map(item=>{

02 4 return item })
Logger.log(result) [[2,4],[3,1],[5,7],[8,9]]

13 1 แมปขอ้ มูลคอลมั น์ 0 Array 2 มติ ิ
25
38 7 var result = Numbers.map(item=>{
9 return item[0] })
Logger.log(result) 2,3,5,8

แมปขอ้ มลู คอลัมน์ 1

var result = Numbers.map(item=>{
return item[1] })
Logger.log(result) 4,1,7,9

4. Filter

จะมีหน้าท่ีไวค้ ัดกรอง ถ้าสมาชกิ ใน Array ตัวไหนท่ีเงอื่ นไขได้ตามท่ีทาหนดไว้
ใน Function จะถกู นามาใส่รวมกันใน Array ใหม่ท่ีเป็นผลลัพธ์

Numbers var result = Numbers.filter(item=>{ false result
2 return item>3 })
Logger.log(result) 5,8 5
3 8
item return
5
8 item>3 false
true

true

5. Find

แทบจะเหมือนกับ Method Filter เลยแต่ต่างกันตรงท่ี Method Find นั้น
return ค่าออกมาเฉพาะผลลัพธต์ ัวแรกท่ีทาได้ตามเงอื่ นไขเท่านั้น

Numbers var result = Numbers.find(item=>{ result
2 return item>3 })
Logger.log(result) false

item return

3 false
item>3

5 true 5

8