16.4. Custom dialogs ( Modal Dialog )
Custom dialogs
https://developers.google.com/apps-script/guides/dialogs#custom_dialogs
Custom dialogs เปป็น Dialog ที่ทรเราออกแบบเอง โดยใชช้เซอร์ลวิลส HTML ในการสรช้าง Dialog ในรูดปแบบ
หนาช้ เวก็บ HTML ฉะนัข้นเวลารขนสคริลปตล์ สครปิล ตจล์ ะไมช่หยดชุ รขน(ฝฝง่ัป Server-side) เมีท่อร Dialog ถดูกเปิฟด
HTML Service: Communicate with Server Functions
https://developers.google.com/apps-script/guides/html/communication
คลาส google.script.run (Client-side API)
https://developers.google.com/apps-script/guides/html/reference/run
google.script.run เปป็นการสีอท่ร สารทางเดรียวในฝ่งฝัป Client-side เปป็น JavaScript API และเปนป็ สลง่ิที ที่ทรมีรใน
เซอร์วล สิล HTML ทรีท่สามารถฟงัป กช์ล ขีท่น Google Apps Script ในฝ่งปัฝ Server-side เพทรอ่ี ทจ่ีรท ะมรปี ฏสลิ ขมพนข ธ์กล บข กรอบ
โต้ชตอบตาช่ งๆ เช่ชน Sidebar เป็นป ตนช้
showModalDialog(userInterface, title) – เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#showmodaldialoguserinterface,-title
ใช้เช ปฟิด Dialog โดยไมช่หยุชดการรนข โคด้ช การสอ่ีรท กบข สครลิปตฝ์ล ฝงปั่ Server-side ฝง่ฝัป Client-side จะตอ้ช งเรยีร กใช้ช
API google.script เพ่รอที เรยีร กใช้ชคลาส HtmlService เชนช่ เวลาจะปิฟด Dialog เรรยี กใช้ช Method
google.script.host.close() ในฝงปัฝ่ Client-side
พารามิเล ตอรล์
Name Type Description
userInterface Object An HtmlOutput representing the interface to display.
The title of the dialog; overrides any title set by calling setTitle()
title String on the userInterface object.
16.4.ก.) ตววั อย่าท ง : แสดง Dialog
โค้ชดในตขวอยา่ช งนขี้รมั ีร 2 ไฟลล์ กกค็ อร ไฟลล์ .gs และ ไฟล์ล .html การรขนโคดช้ ทกาไดช้ 2 วธลิ ีร ก็กครอ รขนฟัปงกลช์ ี่นทข
onOpen หรอร เปปดิ ไฟล์ร Google Sheet (ใชว้ช ธลิ รีรรเี ฟรช) ก็ไก ด้ช
ไฟล์ล Page.html มรโี คดช้ ดขงตอช่ ไปนีรข้ั
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<!-- ปปมุค่ เม่ือชม คลิกด ใหป้ค ปิด Dialog -->
Hello, world! <input type="button" value="Close" onclick="google.script.host.close()" />
<!-- google.script.host.close() ใช้ชปปดิ Custom dialog -->
</body>
</html>
โดย วสนสั ตต์ คคณุ ดลิด กเศวต ([email protected]) 151
ไฟลล์ Code.gs มรีโคช้ดดงข ต่อช ไปนรี้ขั
function onOpen() { // รนัส อัตส โนมสัตเดิ ม่มอืช เปดปิ ไฟลต์ Google Sheets
SpreadsheetApp.getUi() // สร้คางเมนย Custom Menu → Show dialog
.createMenu('Custom Menu')
.addItem('Show dialog', 'showDialog')
.addToUi() ;
}
function showDialog() {
var html = HtmlService.createHtmlOutputFromFile('Page')
.setWidth(400) // ขนาดของกรอบ Dialog
.setHeight(300) ; // ขนาดของกรอบ Dialog
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showModalDialog(html, 'My custom dialog') ;
}
เมอทรี่ รขนฟปงั กช์ล ขีทน่ onOpen หรอร เปดปิ ไฟลร์ จากนั้ขนไปทีเร มนูด Custom Menu → Show dialog จะไดผ้ช ลลขพธล์
ดงข ตชอ่ ไปนี้ัขร - เนอข้รั หาและรดูปแบบของกรอบ Dialoge ออกแบบจากไฟลล์ Page.html
16.5. Custom sidebars
Custom sidebars
https://developers.google.com/apps-script/guides/dialogs#custom_sidebars
Custom sidebars เป็ปน Sidebar ท่ีทรเราออกแบบเอง โดยใช้ชเซอรล์วิลส HTML ในการสร้ชาง ในรดูปแบบหน้ชา
เวก็บ HTML ฉะนันข้ เวลารนข สครลปิ ตล์ สคริปล ตจ์ล ะไมช่หยดุช รนข เมอทรี่ Dialog ถกดู เปฟิด
showSidebar(userInterface) – เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#showsidebaruserinterface
ใช้ชเปิฟด Sidebar ทรท่ีมีรเน้ขรัอหาขช้างในเป็ปนแบบ Client-side กก็ครอ เนรขั้อหาทที่รกกาหนดเองได้ช และทกางานในฝัฝ่ปง
Client
พารามลิเตอรล์
Name Type Description
userInterface Object An HtmlOutput representing the interface to display.
152 เซอรรว์ วิส Spreadsheet
ตวข อยช่าง โคด้ช ในตวข อยช่างนัขร้ีมรี 2 ไฟลล์ ก็กคอร ไฟล์ล .gs และไฟลล์ .html การรขนโคช้ดทาก ไดช้ 2 วธิล รี กคก็ อร รนข ฟงัป
กช์ล ีนทข่ onOpen หรรอ เปิดป ไฟลร์ Google Sheet (ใชว้ช ลธิ รรี เีร ฟรช) ก็ไก ดช้
ไฟลล์ Page.html มรีโคดช้ ดขงตชอ่ ไปนข้ัีร
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<!-- ปมุ่ปค เมมืชอ่ คลดกิ ใหคป้ ดิป Dialog -->
Hello, world! <input type="button" value="Close" onclick="google.script.host.close()" />
<!-- google.script.host.close() ใชป้ค ปิด Custom sidebars -->
</body>
</html>
ไฟล์ล Code.gs มโีร คดช้ ดขงตอ่ช ไปนีขร้ั
function onOpen() { // รนัส อตัส โนมตัส เิด ม่ืมอช เปดิป ไฟลต์ Google Sheets
SpreadsheetApp.getUi() // สราค้ งเมนย Custom Menu → Show sidebar
.createMenu('Custom Menu')
.addItem('Show sidebar', 'showSidebar')
.addToUi();
}
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('Page')
.setTitle('My custom sidebar')
.setWidth(300) // กาจ หนดความกวา้ค ง Sidebar
SpreadsheetApp.getUi().showSidebar(html) ;
}
เมท่ีอร รขนฟปังกช์ล ี่นทข onOpen หรรอ เปิดป ไฟล์ร จากน้นขั ไปท่ีรทเมนูด Custom Menu → Show sidebar จะได้ช
ผลลพข ธดล์ งข ตช่อไปน้ัขีร - เนขอั้ร หาและรูปด แบบของกรอบ Dialog ออกแบบจากไฟลล์ Page.html
โดย วสันส ตต์ คณุค ดลิด กเศวต ([email protected]) 153
154 เซอร์วร วิส Spreadsheet
บททท่ี 17
คลาส Browser
17.1. msgBox()
คลาส Browser
https://developers.google.com/apps-script/reference/base/browser
ใชชเ้ ข้าช ถทึง Dialog boxes ของ Google Sheets เทชา่ นขน้ั
msgBox(prompt) - เมถอดในคลาส Browser
https://developers.google.com/apps-script/reference/base/browser#msgboxprompt
msgBox(prompt, buttons) - เมถอดในคลาส Browser
https://developers.google.com/apps-script/reference/base/browser#msgboxprompt,-buttons
msgBox(title, prompt, buttons) - เมถอดในคลาส Browser
https://developers.google.com/apps-script/reference/base/browser#msgboxtitle,-prompt,-buttons
msgBox() ใชแช้ สดง Message box ทมี่ทร ีรข้ชอความและป่มุปช ตาช่ งๆ
เนอี่ทร งจากเมถอด msgBox() เปดฟิ Message box ทรี่รท นข ในฝฝงั่ป Client-side จึงท อาจทาก ใหช้ Google Apps
Script ซงท่ึี รขนในฝัปงฝ่ Server-side คา้ช งได้ช จึงท แนะนาก ใหใ้ช ช้ช Ui Prompt จะดรกี กว่าช
พารามเลิ ตอร์ขล อง msgBox()
Name Type Description
title String The title of the dialog box.
prompt String The text to be displayed in the dialog box.
buttons ButtonSet The type of button set to use. (ดดตู าราง Enum ButtonSet)
Enum ButtonSet
https://developers.google.com/apps-script/reference/base/button-set.html
Property Type Description
OK Enum A single "OK" button, indicating an informational message that
can only be dismissed.
OK_CANCEL Enum An "OK" button and a "Cancel" button, allowing the user to either
proceed with or halt an operation.
YES_NO Enum A "Yes" button and a "No" button, allowing the user to answer a
yes/no question.
YES_NO_CANCEL Enum A "Yes" button, a "No" button, and a "Cancel" button, allowing the
user to either answer a yes/no question or halt an operation.
156 เซอร์รววิส Spreadsheet
ตวข อยา่ช ง
// แสดง Dialog box - มท Title + ปมคุ่ป Yes + No
Browser.msgBox('Greetings', 'hello world', Browser.Buttons.YES_NO) ;
ผล
17.2. inputBox()
inputBox(prompt) - เมถอดในคลาส Browser
https://developers.google.com/apps-script/reference/base/browser#inputboxprompt
inputBox(prompt, buttons) - เมถอดในคลาส Browser
https://developers.google.com/apps-script/reference/base/browser#inputboxprompt,-buttons
inputBox(title, prompt, buttons)
https://developers.google.com/apps-script/reference/base/browser#inputboxtitle,-prompt,-buttons
inputBox ใช้ชงานคล้าช ยกบข msgBox พารามเิล ตอรลก์ กเ็ หมอร นกขน เพรยี งแตใช่ ชรช้ ขบค่าช เข้ชาไป
ตวข อย่าช งการใช้ชงาน
function myFunction() {
var name = Browser.inputBox('Enter your name'); // จบสั ค่ตาทท่กชื รอกลงใน inputBox
SpreadsheetApp.getActiveSpreadsheet()
.getActiveSheet()
.getRange('A1')
.setValue(name);
}
ผล – หลงข จากรนข สครลิปตลแ์ ล้วช ใหไช้ ปดูทด ที่ไร ฟล์ล Google Sheet จะปรากฎ Input box
โดย วสัสนต์ต คุณค ดดิลกเศวต ([email protected]) 157
หลขงกรอกข้อช มูลด และ คลลกิ ปมุ่ปช OK จะกรอกชีอทร่ ทพ่ีทร ิลมพล์ลงใน inputBox ลงในเซลล์ล A1
158 เซอรว์ร วสิ Spreadsheet
บทที่ท 18
การประยกล ตร์ใชช้งาน
18.1. การกรองแถวซาน้ีช ทีชิวง้
ทร่ีมท า https://developers.google.com/apps-script/articles/removing_duplicates
ตวข อยา่ช งขช้อมลูด ทที่มร ีรแถวซัาขก้ (ทขงั้ แถว) ตวข อยาช่ งตามภาพ
ใหช้สร้ชางโปรจก็ค Google Apps Script แบบฝปังในไฟล์ล Google Sheet จากน้ขัน ใส่ชโค้ชดดขงต่ชอไปนั้รีข เม่ีรทอรขน
โคช้ด แถวซัขา้ก ใน Google Sheet จะหายไป
function removeDuplicates() {
var sheet = SpreadsheetApp.getActiveSheet() ; // จบสั Data ทชั้ีสงหมดในชี้ทชท
var data = sheet.getDataRange().getValues() ;
var newData = [] ; // สรา้ค งอาเรยต์วต่างๆ ไวค้รอเกผ็จ ลลพัส ธ์ตจากการกรอง
for (var i in data) { // for – ชนวัข้ ทีท่ 1
var row = data[i] ; // จบสั ทลท ะแถว
// Logger.log(row); // พดมิ พ์ต : [Apple, 15.0, 200.0, 3000.0]
var duplicate = false ; // เร่มดชิื ตคน้ Set เปนป็ false ไว้กค ่อต น
for (var j in newData) { // for – ชนว้ัข ทท่ี 2
if (row.join() == newData[j].join()) {
// Apple,15,200,3000 == ,,, --------------------> แถวไมซ่ต ชจีา้ ขคา้ มไป
// ถา้ค แถวซ้จชาี กัสน
duplicate = true ; // เจอแถวซ้าชีจ Set เปน็ป true
} // if
} // for – ชนวั้ข ท่ที 2
// ถ้าค เปป็น !false(true) หรมอื แถวไมซท่ ากขั้ ----------------> จบัส ใส่ต newData
if (!duplicate) {
newData.push(row);
} // if
} for – ชนั้ขว ทีท่ 1
// จวับอาเรย์ผร ลลวพั ธ์ร วางกลับว ไปแทนทที่
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
160 เซอรว์ร ิสว Spreadsheet
อธบิล ายการทกางานของโคด้ช ขช้างตช้น
สรา้ช งอาเรยผ์ล ลลพข ธ์วล า่ช งๆ ไวร้ช อรขบผลจากการกรอง กค็ก อร var newData = [] ;
จขบข้ชอมดูลทขั้งหมดในชั้ขรีทมาก่ชอน var data = sheet.getDataRange().getValues() จากน้ัขนจขบมาทีรละ
แถวโดยใช้ชหลูดป for/in (ช้ัขวนท่ที1) ส่ีทงิล ททีร่จขบมาไดช้ เชน่ช [Apple, 15.0, 200.0, 3000.0]
จากน้ขันนกาไปประมวลผลตอ่ช ในหลปดู for/in (ชนขว้ั ทีท่2) โดยรวมขช้อมลดู ในแถวทีรทจ่ บข มาได้โช ดยใชช้ Method join
กคก็ อร row.join() ผลทีทไร่ ดเช้ ช่ชน Apple,15,200,3000
เม่รทีอรวมแลช้ว นกาไปเปรรียบกขบ สมาชิลกในแถวของอาเรย์ลผลลขพธ์ลท่ทีร Join แล้ชว กก็ครอ newData[j].join()
โดยเปรยีร บเทรยี บทีรละแถว ไปจนครบทุชกแถว (เหตนุช ีจ้รขั งึท ตอ้ช งใชช้ for/in ชัขน้ ท่รีท 2)
ตวข อยชา่ งการเปรรยี บเทียร บ
Apple,15,200,3000 == ,,, // คนมื ค่าต false
ถ้ชาครนคช่า false หมายถึทง ขช้อมูดลไมช่ซขกั้า กก็ใหช้จขบแถวนขีั้ร ยขดเขช้าไปในอาเรย์ลว่ชางโดยใช้ช Method push ก็กครอ
newData.push(row)
ตวข อยา่ช งการเปรยีร บเทยรี บครงัข้ ท่รีท 2 - หลงข จากยดข แถวขอช้ มดลู เข้ชาไปในอาเรยผ์ล ลลพข ธล์แลชว้
Apple,15,200,3000 == Apple,15,200,3000 // คนมื คาต่ true
ถช้าครนค่ชา true ก็คก รอ แถวขอช้ มลดู ตชน้ ทาง กขบ แถวขช้อมูดลในอาเรย์ลผลลพข ธล์ ซขกา้ั กขน ก็กใหช้ข้ชามไปจขบแถวใหมช่มา
เปรยรี บเทีรยบตช่อ ไมมช่ รกี ารยดข แถวซักขา้ เขชา้ ไปในอาเรย์ผล ลลพข ธล์
18.2. Data Lookup
ตวข อยา่ช งน้ัรีข ทกาคล้ชายกขบ VLOOKUP โดยสชง่ ข้อช มูลด ที่รทเปนป็ ครีย์ลไปคช้นหาในตารางขช้อมดูล หากเจอทรีท่ตรงกขน ก็กให้ช
ครนคา่ช ในคอลขมน์อล ีท่นร ในแถวเดียร วกขนกลขบมา
ตวข อย่าช งขชอ้ มดูลในชขรั้ีท มดีร ขงตอ่ช ไปนัขี้ร
โดย วสสนั ตต์ คุคณดดลิ กเศวต ([email protected]) 161
โคด้ช
function LookUp(){
var cost = getCost(60602) ;
Logger.log(cost) ; // ฿45.00
}
function getCost(zipCode){
zipCode = Number(zipCode) ; // แปลงคา่ต ททจช่ื บสั มาเปน็ป ตัสวเลข เพือ่ชม ความมัสนื่ช ใจ
var id = "<< Spreadsheeet Id >>" ;
var ss = SpreadsheetApp.openById(id) ;
var ws = ss.getSheetByName("Estimate") ;
var data = ws.getRange(1,1,ws.getLastRow(),2).getValues() ; // จสบั ขอค้ มลย 2 คอลัมส น์ต
var zipCodesList = data.map(function(r){ return r[0]; }); // คอลมัส นท์ต ชทื่ 1
// [72728, 60601, 60602, 90353, 67140]
var costList = data.map(function(r){ return r[1]; }); // คอลัมส น์ทต ทชื่ 2
// [50.0, 40.0, 45.0, 70.0, 100.0]
var position = zipCodesList.indexOf(zipCode) ; // ***
// 2 <-– [72728, 60601, 60602, 90353, 67140] <---- 60602
if(position > -1){ // กรณทหาเจอ
return "฿"+costList[position].toFixed(2) ;
} else { // กรณหท าไมเ่ท จอ
return "Unavailable" ;
};
}
162 เซอรร์วิวส Spreadsheet
บททที่ 19
วนับ และเวลา
19.1. สรช้างวตับ ถวุค บนั ทท่แีร ละเวลา
Working with Dates and Times
https://developers.google.com/google-ads/scripts/docs/features/dates
JavaScript Date Output
https://www.w3schools.com/js/js_dates.asp
JavaScript Date Formats
https://www.w3schools.com/js/js_date_formats.asp
19.1.ก.) new Date()
new Date() ใชชส้ ร้าช งวขตถุวช นข ทต่รีท วข ใหม่ช ซี่ึทงสามารถสรา้ช งได้ช 4 วธลิ รี
new Date()
new Date(year, month, day, hours, minutes, seconds, milliseconds)
new Date(milliseconds)
new Date(date string)
ตวข อยาช่ ง
var d1 = new Date(2018, 11, 24, 10, 33, 30, 0) ;
// Mon Dec 24 2018 10:33:30 GMT+0700 (Indochina Time)
var d2 = new Date(2018, 11, 24, 10, 33) ;
// Mon Dec 24 2018 10:33:00 GMT+0700 (Indochina Time)
var d3 = new Date(2018, 11, 24, 10) ;
// Mon Dec 24 2018 10:00:00 GMT+0700 (Indochina Time)
var d4 = new Date("October 13, 2014 11:13:00") ;
// Mon Oct 13 2014 11:13:00 GMT+0700 (Indochina Time)
var d5 = new Date("2015-03-25") ;
// Wed Mar 25 2015 07:00:00 GMT+0700 (Indochina Time)
var d6 = new Date(99, 11, 24) ;
// Fri Dec 24 1999 00:00:00 GMT+0700 (Indochina Time)
var d7 = new Date(9, 11, 24) ;
// Fri Dec 24 1909 00:00:00 GMT+0642 (Indochina Time)
var d8 = new Date(0) ;
// Thu Jan 01 1970 07:00:00 GMT+0700 (Indochina Time)
// วนัว และเวลาอช้างองิว
var d9 = new Date(100000000000) ;
// Sat Mar 03 1973 16:46:40 GMT+0700 (Indochina Time)
// ผา่ต นมา 100000000000 มดิลลดิวนดิ าทท นสบั จากวัสนและเวลาอคา้ งองิด
var d10 = new Date(-100000000000) ;
// Mon Oct 31 1966 21:13:20 GMT+0700 (Indochina Time)
// ยอค้ นไป 100000000000 มิดลลดวิ นิด าทท นบสั จากวนัส และเวลาอ้าค งอดิง
164 เซอร์รวสิว Spreadsheet
19.1.ข.) +new Date()
ใสช่เครีรอท่ งหมาย + หนช้า new จะไดค้ช ชา่ มลิลวลิ นลิ าทรีของวนข ทท่ีร เช่ชน
var d1 = new Date() ; // เชต่น Sun May 03 2020 09:52:43 GMT+0700 (Indochina Time)
var d2 = +new Date() ; // เชต่น 1588474363200
19.2. การทนางานกับบ วับนทแ่ีทร ละเวลา
JavaScript Get Date Methods
https://www.w3schools.com/js/js_date_methods.asp
JavaScript Set Date Methods
https://www.w3schools.com/js/js_date_methods_set.asp
JavaScript Date Formats
https://www.w3schools.com/js/js_date_formats.asp
คลาส Utilities
https://developers.google.com/apps-script/reference/utilities/utilities#formatdatedate-timezone-format
setNumberFormat(numberFormat) – เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#setnumberformatnumberformat
setNumberFormats(numberFormats) – เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#setnumberformatsnumberformats
formatDate(date, timeZone, format) – เมถอดในคลาส Utilities
https://developers.google.com/apps-script/reference/utilities/utilities#formatdatedate,-timezone,-format
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html - Java SE SimpleDateFormat
formatDate() ใช้จช ดข รปูด แบบวนข ทีท่ร โดยใชชแ้ พทเทลริ ลน์ ตามที่ทอร ธบิล ายไวใช้ นคลาส Java SE
SimpleDateFormat (ตามมลิงล คลข์ ้าช งบน) โดยจะครนคชา่ กลขบมาเป็ปนข้อช ความ(String)
พารามเิล ตอรล์
Name Type Description
date Date a Date to format as a String
timeZone String the output timezone of the result
format String a format per the SimpleDateFormat specification
ตวข อยชา่ ง
var formattedDate = Utilities.formatDate( new Date()
, "GMT" // "GMT+7" for Thailand
, "yyyy-MM-dd' T 'HH:mm:ss' Z '") ;
Logger.log(formattedDate) ;
โดย วสันส ต์ต คณคุ ดดลิ กเศวต ([email protected]) 165
ตวร อย่าต ง
ตวข อยาช่ งโค้ชดทีทเร่ กรีท่ยวกบข วนข ททรหี่ รอร เวลา
function setDate() {
var sheet = SpreadsheetApp.getActiveSheet() ;
var A1 = sheet.getRange("A1").clearContent() ;
var A2 = sheet.getRange("A2").clearContent() ;
var t_date = Utilities.formatDate(new Date(), "GMT+7", "dd MMM yyyy เวลา HH:mm:ss") ;
A1.setValue(t_date) ;
// พิดมพ์ตวัสนทชื่ลท งในเซลลต์ A1 – Type เปป็น TEXT
var n_Date = new Date() ; // Sun Nov 17 08:40:57 GMT+07:00 2019
A2.setValue(n_Date).setNumberFormat("yyyy MMM dd HH:mm:ss") ;
// พมิด พว์ต นัส ทืทช่ลงในเซลลต์ A2 – Type เปปน็ NUMBER
Logger.log(n_Date.getDate()) ; // พมิด พ์ต : 20.0
Logger.log(n_Date.getMonth()) ; // พิมด พต์ : 10.0
Logger.log(n_Date.getYear()) ; // พดิมพต์ : 2019.0
Logger.log(n_Date.getFullYear()) ; // พดมิ พต์ : 2019.0
Logger.log(n_Date.getTime().toString()) ; // พดิมพ์ต : 1574219076765
Logger.log(n_Date.getHours()) ; // พดิมพต์ : 4.0
Logger.log(n_Date.getMinutes()) ; // พดิมพต์ : 36.0
Logger.log(n_Date.getSeconds()) ; // พมิด พ์ต : 10.0
}
ผล
อธิบล ายโค้ชด
เรีท่มิล จาก สราช้ งขชอ้ มสลู เวลาขึรัทน้ มากต่อน โดยใชโ้ช ค้ดช new date() ถาช้ Log ดูด จะไดชผ้ ลลขพธล์ตามตวข อยา่ช ง
Logger.log(new date())
// พิดมพต์ : Wed Nov 20 09:19:08 GMT+07:00 2019
เมี่รทอไดช้ขช้อมูดลเวลามาแลช้ว จากนั้ขนก็กสามารถใชช้ Method อยช่างเชช่น getYear(), getMonth(), getDate()
เข้าช ไปจบข ขอ้ช มดลู ส่ชวนตา่ช งๆในเวลา เชช่น ปป เดรอน วขน ออกมาใช้ไช ดช้ เปนป็ ตช้น
หากตช้องการจขดรดูปแบบวขนทีท่รหรรอเวลา สามารถทาก ไดช้โดยใช้ช Method formatDate ในคลาส Utilities
ผลลขพธทล์ รไที่ ดชม้ า มรชี นิลดขอ้ช มลดู เป็ปน Text เชช่น
166 เซอรว์ร สิว Spreadsheet
Utilities.formatDate(new Date(), "GMT+7", "dd MMM yyyy เวลา HH:mm:ss")
// ถคา้ Log ดจย ะไดผ้ค ลลสัพธต์เชนต่ 20 Nov 2019 เวลา 09:19:28
หากเรากรอกเวลาลงไปในเซลลล์ ในไฟลล์ Google Sheets และต้ชองการจขดรูดปแบบตขวเลข วขนทีทร่หรรอเวลา
สามารถทาก ไดช้โดยใช้ช Method setNumberFormat() ในคลาส Range เชน่ช
var n_Date = new Date(); // Sun Nov 17 08:40:57 GMT+07:00 2019
A2.setValue(n_Date).setNumberFormat("yyyy MMM dd HH:mm:ss");
Method getTime() ใชจช้ ขบขอช้ มดูลเวลาทรี่สท ร้ชางข้นทึขั มา ใหชอ้ อกมาเปน็ป ตวข เลขมลิลลิวล ลินาทรี นบข จากวนข ททีร่
January 1, 1970 UTC. ซง่ทีึ เป็นป วขนทีอ่ทร า้ช งอลิง เช่ชน
var myDate = new Date(); // พมดิ พ์ต : 1574217590425
Logger.log(myDate.getTime().toString());
getTime() เป็ปน Method ของเวลาททเีร่ ป็ปนพ้ขัรนฐานสกาคญข ในการคกานวณเกรีทย่ วกขบเวลา
19.3. การคนานวณเกรีท่ยวกบับเวลา
Date Math
https://developers.google.com/google-ads/scripts/docs/features/dates#date_math
Method getTime() ใชจ้ช บข ข้ชอมลูด เวลาท่สทีร ร้าช งขึขนทั้ มา ใหอช้ อกมาเปปน็ ตวข เลขมลลิ ลลวิ ลินาทีร โดยนบข จากวนข ททีร่
January 1, 1970 UTC.
( 1 วรน มีร 1000 * 60 * 60 * 24 = 86,400,000 วมนาทท )
ตวข อย่ชางการคาก นวณความแตกต่าช งระหว่าช ง 2 วขนทีรท่
function dateMath(){
var date1 = new Date('November 18, 2019 19:30:00 -0000');
var date2 = new Date('November 21, 2019 21:00:00 -0000');
var diffTime = (fDate.getTime() - sDate.getTime())/1000/60/60 ;
Logger.log(fDate);
Logger.log(sDate);
Logger.log(diffTime);
}
ผล
[ 01 ] Mon Nov 18 19:30:00 GMT+07:00 2019
[ 02 ] Thu Nov 21 21:00:00 GMT+07:00 2019
[ 03 ] 73.5 // หนวต่ ยเปน็ป ชม.
โดย วสัสนตต์ คณุค ดิลด กเศวต ([email protected]) 167
19.4. setHours()
setHours()
https://www.w3schools.com/jsref/jsref_sethours.asp
Method ที่ใรท ชช้กกาหนดเวลาให้กช ขบวขนททีร่
สขญลกข ษณ์ล
Date.setHours(hour, min, sec, millisec)
พารามลิเตอร์ล
Parameter Description
Required. An integer representing the hour.
Expected values are 0-23, but other values are allowed
hour • 1 will result in the last hour of the previous day
• 24 will result in the first hour of the next day
Optional. An integer representing the minutes.
Expected values are 0-59, but other values are allowed:
min • 1 will result in the last minute of the previous hour
• 60 will result in the first minute of the next hour
Optional. An integer representing the seconds
Expected values are 0-59, but other values are allowed:
sec • 1 will result in the last second of the previous minute
• 60 will result in the first second of the next minute
millisec Optional. An integer representing the milliseconds
Expected values are 0-999, but other values are allowed:
• 1 will result in the last millisecond of the previous second
• 1000 will result in the first millisecond of the next second
ตวข อยาช่ ง
var d = new Date();
Logger.log(d); // Tue Feb 04 12:13:23 GMT+07:00 2020
Logger.log(d.setHours(15, 35, 1).toString()) ; // 1580805301061
Logger.log(d); // Tue Feb 04 15:35:01 GMT+07:00 2020
var formattedDate = Utilities.formatDate(d
, "GMT+7"
, "yyyy-MM-dd' T 'HH:mm:ss' Z ' ");
Logger.log(formattedDate) ; // 2020-02-04 T 15:35:01 Z
168 เซอรวร์ ิสว Spreadsheet
บททที่ 20
ฟฟงั กช์ร น่ีทบั , เมถอด และ
คลณสมบตบั ิว ทีทน่ าุ่ล สนใจ
20.1. toString()
JavaScript Number toString() Method
https://www.w3schools.com/jsref/jsref_tostring_number.asp
toString() เปนป็ Method ของคลาส Number(ตวข เลข) ใชช้แปลงจากตขวเลขเปป็นขอช้ ความ
var num = 15 ;
Logger.log(num) ; // พมดิ พ์ต : 15.0
Logger.log(typeof num) ; // พมิด พต์ : number
var n = num.toString() ;
Logger.log(n) ; // พดิมพต์ : 15
Logger.log(typeof n) ; // พมดิ พต์ : string
สามารถใส่ช Argrument ให้ชกขบ toString() ไดช้ หมายถทึง แปลงเปป็นเลขฐานตามทที่รระบชุ เช่ชน toString(2)
กคก็ อร แปลงเป็ปนเลขฐาน 2
var num1 = 155; // พมดิ พต์ : 10011011
// พมดิ พ์ต : 9b
Logger.log(num1.toString(2));
Logger.log(num1.toString(16)); // พมดิ พต์ : -100000000011
// พมิด พ์ต : -803
var num2 = -2051;
Logger.log(num2.toString(2));
Logger.log(num2.toString(16));
20.2. String()
JavaScript String() Function
https://www.w3schools.com/jsref/jsref_string.asp
ใชแช้ ปลงคชา่ ของอกอ๊ บเจก็ก ตลเ์ ป็ปนสตริลง
โครงสราช้ งการใช้งช าน
String(object)
พารามลเิ ตอรล์
Parameter Description
object (Required) A JavaScript object
170 เซอร์รวสวิ Spreadsheet
ตวข อย่าช ง
var x1 = Boolean(0);
var x2 = Boolean(1);
var x3 = new Date();
var x4 = "12345" ;
var x5 = 12345 ;
var res = String(x1) + "\n" +
String(x2) + "\n" +
String(x3) + "\n" +
String(x4) + "\n" +
String(x5) ;
Logger.log(res) ;
ผล
Logs
[]
false
true
Sun May 10 2020 12:34:08 GMT+0700 (Indochina Time)
12345
12345
20.3. toLowerCase() และ toUpperCase()
JavaScript String toLowerCase()
https://www.w3schools.com/jsref/jsref_tolowercase.asp
JavaScript String toUpperCase()
https://www.w3schools.com/jsref/jsref_touppercase.asp
toLowerCase() และ toUpperCase() เปป็น เมถอดในคลาส String(ขช้อความ) ใช้ชแปลงตขวอขกษรใน
ขชอ้ ความให้เช ป็นป ตวข พมิล พ์ลเล็กก ท้ัขงหมด หรอร พมลิ พใล์ หญท่ช ข้งั หมด ตามลาก ดบข
var str = "Hello World!" ; // พิดมพต์ : hello world!
// พิดมพต์ : HELLO WORLD!
Logger.log(str.toLowerCase()) ;
Logger.log(str.toUpperCase()) ;
โดย วสัสนตต์ คคณุ ดดิลกเศวต ([email protected]) 171
20.4. PI
JavaScript PI Property
https://www.w3schools.com/jsref/jsref_pi.asp
PI เป็ปนคชุณสมบขตลิ(Property) ในคลาส Math เป็ปนตขวเลขคาช่ คงทขีทร่ อง ¶ กค็ก รอ 3.141159...
function myFunction() { // พมิด พต์ : 3.141592653589793
Logger.log(Math.PI) ;
}
20.5. isNaN()
JavaScript isNaN() Function
https://www.w3schools.com/jsref/jsref_isnan.asp
isNan() เปนป็ ฟปงั ก์ลชนีขท่ ทีทร่ใชช้ทดสอบตวข แปรหรรอคาช่ วาช่ เป็ปน NaN (Not-a-Number) หรรอไม่ช
ตวข อยา่ช ง
isNaN(123) // false
isNaN(-1.23) // false
isNaN(5-2) // false
isNaN(0) // false
isNaN('123') // false – ใสต่เปน็ป ขอ้ค ความแต่ต isNaN มองเปป็น Number
isNaN('Hello') // true
isNaN('2005/12/12') // true
isNaN('') // false
isNaN(true) // false
isNaN(undefined) // true
isNaN('NaN') // true
isNaN(NaN) // true
isNaN(0 / 0) // true
ตวข อยาช่ ง
// var iAge = Browser.inputBox("กรอกอายุค") ;
var iAge = 12 ;
var Age = Number(iAge) ;
if (isNaN(Age)) {
Logger.log("Input is not a number") ;
} else {
Logger.log((Age < 18) ? "Too young" : "Old enough") ;
}
172 เซอร์รวสวิ Spreadsheet
20.6. Number()
Number() - JavaScript Function
https://www.w3schools.com/jsref/jsref_number.asp
number() เปป็นฟัปงกล์ชีขท่นที่ทรใช้ชแปลงค่ชาใหช้เป็ปนตขวเลข หากแปลงไม่ชได้ชจะครนค่ชา NaN กลขบมา กก็ครอ ไมช่ใช่ชทขั้ง
ตวข เลขทข้งั ข้ชอมูดลและหน้าช ตา
var x1 = true ; // พมิด พต์ : 1.0
var x2 = false ; // พมดิ พต์ : 0.0
var x3 = new Date() ; // พมดิ พต์ : 1.572579859377E12
var x4 = "999" ; // พมิด พต์ : 999
var x5 = "999 888" ; // พมดิ พต์ : NaN
Logger.log(Number(x1)) ;
Logger.log(Number(x2)) ;
Logger.log(Number(x3)) ;
Logger.log(Number(x4)) ;
Logger.log(Number(x5)) ;
20.7. split()
JavaScript String split() Method
https://www.w3schools.com/jsref/jsref_split.asp
Method ของข้อช ความ(String) ใชแ้ช ยกขอ้ช ความ แลชว้ เก็กบข้ชอความทท่ีรแยกแล้ชวไวช้ในอาเรยล์
โครงสรช้างการใชง้ช าน Split
string.split(separator, limit)
พารามิเล ตอรล์
Parameter Description
separator
limit (Optional) Specifies the character, or the regular expression, to use
for splitting the string. If omitted, the entire string will be returned (an
array with only one item)
(ตสวั แยกขคอ้ ความเช่ตน ,(Comma) หรืมอ - (Hyphen) เปน็ป ตนค้ )
(Optional) An integer that specifies the number of splits, items after
the split limit will not be included in the array
(จาจ นวนทืช่จท ะเกบ็จ เป็นป สมาชิดกในอาเรย์ต)
separator หากไมร่ช ะบุพช ารามเลิ ตอรล์ ,(Comma) จะถูกด ใชเช้ ปน็ป ตวข แยกข้อช ความโดยปรยลิ าย และ แยก
ขชอ้ ความไดเ้ช ทา่ช ไร กจก็ ะเกก็บไวใ้ช นอาเรย์ลทขั้งหมด
โดย วสนัส ตต์ คุณค ดิดลกเศวต ([email protected]) 173
ตวข อยาช่ ง
var str = "How are you doing today?" ;
var res = str.split(" ") ;
Logger.log(res) ;
Logger.log(res.length) ;
ผล
Logs
[ ] [How, are, you, doing, today?]
[ ] 5.0
20.8. parseInt()
parseInt() - JavaScript Global Functions
https://www.w3schools.com/jsref/jsref_parseint.asp
ใชว้ช ิลเคราะหล์และแปลงจากขอช้ ความ(String) ไปเปปน็ เลขจกานวนเต็กม(Integer) และปดัป ลงอย่าช งเดยีร ว
โครงสราช้ งการใช้งช าน
parseInt(string, radix)
พารามลเิ ตอรล์
Parameter Description
string (ตอ้ช งการ) String(หรือม ตัสวเลข) ทจืชท่ ะแปลง
(เวนช้ ได้ช) ตวสั เลข 2 ถงถึ 36 แสดงถึงถ เลขฐานทื่จชท ะแปลงไปเปนป็
radix หากไม่ตระบุคจะหมายถึถงเลขฐาน 10
ถ้าช มรีการใช้พช ารามิลเตอรล์ radix
ถาช้ ข้อช ความ(String) ขน้ัทขึ ตนช้ ดวช้ ย "0x" ความหมายกค็ก รอ ใชช้ radix = 16 (hexadecimal)
ถช้าขช้อความ(String) ข้ทขันึ ตช้นดวช้ ย "0" ความหมายกก็คอร ใชช้ radix = 8 (octal)
ถชา้ ขชอ้ ความ(String) ข้ทนึขั ตช้นดว้ช ยตวข อทร่นี ๆ radix = 10 (decival)
ตวข อยาช่ ง
var a = parseInt("10") ; // 10.0
var b = parseInt("10.00") ; // 10.0
var c = parseInt("10.33") ; // 10.0
var d = parseInt("34 45 66") ; // 34.0 - เฉพาะเลขตวัส หน้คาเทต่าน้สันชี
var e = parseInt(" 60 ") ; // 60.0 – ช่อต งวต่างหัสวและทาค้ ยมทได้ค แตจต่ ะถกย ตัดส
var f = parseInt("40 years") ; // 40.0
var g = parseInt("He was 40") ; // NaN – ขีชนถ้ึ ดค้วยอกสั ษร
var h = parseInt("10", 10) ; // 10.0
var i = parseInt("010") ; // 8.0 – ขึช้ีถนดว้ค ย 0 ,radix = 8
var j = parseInt("10", 8) ; // 8.0
// 16.0 – ข้ชึีนถ ดคว้ ย 0x ,radix = 16
var k = parseInt("0x10") ; // 16.0
var l = parseInt("10", 16) ;
174 เซอร์รวสิว Spreadsheet
ตวข อยชา่ งการใช้ช parseInt() แปลงเลขฐานตาช่ งๆ เปนป็ เลขฐาน 10
function bi3dec() {
var a = parseInt("10111" , 2) ; // 23 (เลขฐาน 10) = 10111 (เลขฐาน 2)
var b = parseInt("10001" , 2) ; // 27 (เลขฐาน 10) = 10001 (เลขฐาน 2)
var c = parseInt("10111" , 16) ; // 65809 (เลขฐาน 10) = 10111 (เลขฐาน 16)
var d = parseInt("10001" , 16) ; // 65537 (เลขฐาน 10) = 10001 (เลขฐาน 16)
var e = parseInt("244F" , 16) ; // 9295 (เลขฐาน 10) = 244F (เลขฐาน 16)
}
20.9. charAt()
JavaScript String charAt() Method
https://www.w3schools.com/jsref/jsref_charat.asp
คนร ค่ชาเป็ปนอกข ษร ณ ตาก แหนช่งทีทร่ร ะบชุ
โครงสรชา้ งการใช้ชงาน
string.charAt(index)
พารามเลิ ตอรล์
Parameter Description
index (Required) ตวัส เลข ระบตุค าจ แหนง่ต ของต้อค งอกสั ษรทชทื่ตค้องการคมืนคาต่ กลบสั มา
ตวข อยชา่ ง
var str = "HELLO WORLD" ; // D
var res = str.charAt(str.length-1) ;
20.10. charCodeAt()
JavaScript String charCodeAt() Method
https://www.w3schools.com/jsref/jsref_charcodeat.asp
HTML Unicode (UTF-8) Reference
https://www.w3schools.com/charsets/ref_html_utf8.asp
charCodeAt() ครนคาช่ กลขบมาเปป็นรหสข Unicode ของตวข อขกษร ที่อทร ยชดู่ในสตรงลิ ทรีท่ร ะบุชตาก แหน่งช โดย
พารามลเิ ตอร์ล index
โครงสรช้างการใช้ชงาน
string.charCodeAt(index)
พารามลเิ ตอรล์
Parameter Description
index (Required) ตวสั เลข ระบคตุ าจ แหน่งต ของตอ้ค งอสักษรท่ืทชต้คองการคนมื ค่ตากลับส มา
โดย วสนสั ต์ต คคุณดิลด กเศวต ([email protected]) 175
ตวข อยา่ช ง // 68
var str = "HELLO WORLD" ;
var res = str.charCodeAt(str.length-1) ;
20.11. fromCharCode()
JavaScript String fromCharCode() Method
https://www.w3schools.com/jsref/jsref_fromcharcode.asp
แปลงรหสข Unicode ไปเปป็นตขวอกข ษร เมถอดนีขร้ใั ชก้ช ขบวขตถุช String โครงสรา้ช งการใช้ชงาน ใช้งช านแบบน้ีเขัร สมอ
กก็คอร String.fromCharCode()
โครงสรา้ช งการใชงช้ าน
String.fromCharCode(n1, n2, ..., nX)
พารามเลิ ตอรล์
Parameter Description
n1, n2, ..., nX (Required) ตวสั เลข Unicode ใสต่เรยท งกัสนไปขีนสัช้ ดว้ค ย ,
ตวข อยา่ช ง
var res = String.fromCharCode(72, 69, 76, 76, 79) ;
Logger.log(res) ; // HELLO
20.12. trim()
JavaScript String trim() Method
https://www.w3schools.com/jsref/jsref_trim_string.asp
โครงสรา้ช งการใชชง้ าน
string.trim()
*** ไมช่ Trim ตรงกลาง เชชน่ ตรงกลางมีร 3 Spaces กจ็ก ะปล่ชอยไวชอ้ ย่ชางนขั้น
ตวข อยา่ช ง
var str = " Hello World! " ;
Logger.log(str.trim()) ; // Hello World!
หรรอมคีร า่ช เทา่ช กบข การใชช้ replace() ตอช่ ไปนัีขร้
function myTrim(x) {
return x.replace(/^\s+|\s+$/gm,'') ;
}
176 เซอรว์ร ิวส Spreadsheet
20.13. substr() และ substring()
JavaScript String substr() Method
https://www.w3schools.com/jsref/jsref_substr.asp
ใช้ชตดข ตดข อกข ษรจากขชอ้ ความออกมา โดยระบชจุ ุชดเริ่ลทมี ตขดและความยาวทจ่รที ะตดข
โครงสร้าช งการใชง้ช าน
string.substr(start, length)
พารามเิล ตอรล์
Parameter Description
(Required) ตาจ แหน่ตงเรมิดช่ื ตนค้ ตดสั โดยตาจ แหน่งต แรกคอืม 0
start ถา้ค คาต่ เปป็นบวก และมากกวาต่ หรมือเทาต่ กสับ ความยาวของ string จะคืมนคา่ต string วต่าง
ถาค้ คาต่ เปปน็ ลบ จะเร่ืชิมด จากดคา้ นหลังส
ถ้าค คาต่ เป็ปนลบ และมากกว่ตา ความยาวของ string คาต่ ของ start จะถกย เซ็จตเปปน็ 0
length (Optional) จาจ นวนตัวส อสักษรทชทจื่ ะะตัดส ถ้คาเวคน้ ไวจ้ค ะตดสั ตสวั อสักษระทีส้ชงั หมดทเื่ชท หลอืม
ตวข อยชา่ ง
var str = "Hello world!" ; // llo world!
var res = str.substr(2) ; // H
var res = str.substr(0, 1) ; // !
var res = str.substr(11, 1) ;
JavaScript String substring() Method
https://www.w3schools.com/jsref/jsref_substring.asp
ใช้ตช ดข ตดข อขกษรจากขช้อความออกมา โดยระบชุจุดช เร่ีลิทมตดข และจุชดจบ
โครงสร้าช งการใชงช้ าน
string.substring(start,end)
พารามเลิ ตอรล์
Parameter Description
start (Required) The position where to start the extraction.
First character is at index 0
end (Optional) The position (up to, but not including) where to end the
extraction. If omitted, it extracts the rest of the string
โดย วสสันตต์ คคุณดดิลกเศวต ([email protected]) 177
20.14. search()
JavaScript String search() Method
https://www.w3schools.com/jsref/jsref_search.asp
ใชค้ช น้ช หาในขช้อความดวช้ ยคาช่ ท่ทีรกกาหนด โดยจะคนร คาช่ กลบข มาเปนป็ ตาก แหนช่งของค่าช ทีท่พร บ แต่ชถ้ชาไมพ่ช บเลย จะ
ครนคช่า -1 กลบข มา ค่ชาทใ่ีทร คน่ช หาสามารถเป็นป String หรอร Regular Expression (ดเย พดิชมื่ เติดมบทท่ืทช 22 : Regular
Expression หนาค้ 191) กไก็ ดช้
โครงสราช้ งการใชง้ช าน
string.search(searchvalue)
พารามเิล ตอร์ล
Parameter Description
searchvalue (Required) Regular expression หรมือ String(จะถกย แปลงเปนป็ RE โดยอตสั โนมตัส ิด)
ตวร อย่าต งทที่ 1 – คน้ช หาโดยใช้ช String
var str = "Mr. Blue has a blue house" ;
var n = str.search("blue") ;
ตวร อยา่ต งทท่ี 2 – ค้ชนหาโดยใชช้ Regular Expression
var str = "Mr. Blue has a blue house" ;
var n = str.search(/blue/i) ;
ตรวอยต่างที่ท 3 – Regular Expression ใส่ชตขวแปรลงไปไม่ชได้ช หากตช้องการใช้ช ตขวแปรในการสรช้าง Regular
Expression ให้ใช ช้ช RegExp ชว่ช ย
var textToSearch = "Hello world" ;
var regPatText = 'w'+ '.*' ;
var regPatNew = new RegExp(regPatText, "gi") ;
var posFound = textToSearch.search(regPat) ;
Logger.log(posFound) ; // 6
178 เซอร์วร วิส Spreadsheet
20.15. replace()
JavaScript String replace() Method
https://www.w3schools.com/jsref/jsref_replace.asp
JavaScript Regular Expressions
https://www.w3schools.com/js/js_regexp.asp
JavaScript RegExp Reference
https://www.w3schools.com/jsref/jsref_obj_regexp.asp
replace() ใชค้ช ้นช หาและแทนท่ีทดร ว้ช ยขช้อความ ในขช้อความตังข้ ตนช้ และครนคช่ากลบข มาเปน็ป อกรี ความทถ่ีทร ดกู แทนทีทร่
แลว้ช ตวข ททีใ่ร ชชค้ ช้นหาสามารถใชช้เปป็น Regular Expression ไดช้
กรณรีใช้ช Regular Expression หากพบตขวท่ีรทคช้นหา หลายตขวจะครนคช่ากลขบมาเปป็นตขวแรก หากต้ชองการครน
คาช่ หลายตวข ใหช้ จบดวช้ ย /g (global modifier)
โครงสรชา้ งการใช้ชงาน
string.replace(searchvalue, newvalue)
พารามเลิ ตอรล์
Parameter Description
searchvalue (Required) The value, or regular expression, that will be replaced by the new value
newvalue (Required) The value to replace the search value with
ตวร อยาต่ งท่ีท 1
ตวข ค้ชนหาเปปน็ Regular Expression และเปปน็ แบบ Case-sensitive
var str = "Mr Blue has a blue house and a blue car" ;
var res = str.replace(/blue/g, "red") ;
Logger.log(res) ; // Mr Blue has a red house and a red car
ตวร อยาต่ งท่ีท 2
ตวข คชน้ หาเปน็ป Regular Expression และเปป็นแบบ Case-insensitive
var str = "Mr Blue has a blue house and a blue car" ;
var res = str.replace(/blue/g, "red") ;
Logger.log(res) ; // Mr red has a red house and a red car
ตวร อยาต่ งทท่ี 3
พารามเลิ ตอร์ลท่รที 2 newvalue ใช้เช ปน็ป ฟปังกลช์ น่ขที เพอีทร่ นกาส่ทลิงี ทท่รคี น้ช พบไปประมวลผลในฟปังก์ชล ่ีทขนต่ชอ
var str = "Mr Blue has a blue house and a blue car" ;
var res = str.replace(/blue|house|car/gi, function (x) {
return x.toUpperCase() ; // แปลงตสัวทืชทพ่ บให้เค ปน็ป พิดมพตใ์ หญท่ต ชงัส้ี มด
});
Logger.log(res); // Mr BLUE has a BLUE HOUSE and a BLUE CAR
โดย วสนสั ต์ต คคุณดิลด กเศวต ([email protected]) 179
20.16. match()
JavaScript String match() Method
https://www.w3schools.com/jsref/jsref_match.asp
match() ใช้ชค้ชนหาขช้อความทีรท่สอดคลช้องกขบ Regular Expression และครนค่ชากลขบมาเปป็น คช่าท่รีทแมทกขน
โดยเก็บก ไวชใ้ นอาเรย์ล แตช่ถ้ชาไมชแ่ มทจะครนคา่ช เปป็น null
โครงสรา้ช งการใชง้ช าน
string.match(regexp)
พารามิลเตอรล์
Parameter Description
regexp (ตชอ้ งการ) Regular Expression
ตวข อยา่ช ง
var str = "The rain in SPAIN stays mainly in the plain" ;
var res = str.match(/ain/gi) ; // ain,AIN,ain,ain
20.17. includes() - Chrome V8
JavaScript String includes() Method
https://www.w3schools.com/jsref/jsref_includes.asp
ใชตช้ รวจสอบว่าช มีรข้อช ความทรร่ีท ะบชุอยดูใช่ นขอ้ช ความตข้งั ตนช้ หรอร ไมช่
โครงสรา้ช งการใช้งช าน
string.includes(searchvalue, start)
พารามลเิ ตอรล์
Parameter Description
searchvalue Required. The string to search for
start Optional. Default 0. At which position to start the search
ตวข อยา่ช ง
var str = "Hello world, welcome to the universe." ;
var n = str.includes("world") ;
Logger.log(n) ; // true // Chrome V8 ถถงึ จะใชไ้ค ด้ค
180 เซอร์วร วสิ Spreadsheet
20.18. IndexOf()
indexOf()
https://www.w3schools.com/jsref/jsref_indexof.asp
ครนคชา่ กลขบมาเป็ปนตกาแหน่ชงแรกท่รีทพบในข้ชอความตัข้งต้ชน โดยจะส่ชงข้ชอความคช้นหาเขช้าไป ค้ชนหาแบบ case
sensitive โดยตกาแหนช่งเรีิมลท่ จาก 0 และจะครนคาช่ -1 หากไมเ่ช จอ
โครงสรา้ช งการใชง้ช าน
string.indexOf(searchvalue, start)
พารามลิเตอร์ล
Parameter Description
searchvalue Required. The string to search for
start Optional. Default 0. At which position to start the search
ตวข อย่าช ง
var str = "Hello planet earth, you are a great planet." ;
var n1 = str.indexOf("planet") ;
Logger.log(n1) ; // 6.0
var n2 = str.indexOf("a") ;
Logger.log(n2) ; // 8.0
var n3 = str.indexOf("a",10) ;
Logger.log(n3) ; // 14.0
20.19. lastIndexOf()
JavaScript String lastIndexOf() Method
https://www.w3schools.com/jsref/jsref_lastindexof.asp
ครนค่ชากลขบมาเป็ปนตาก แหนช่งสุคดท้ชายทร่ทีพบในขช้อความตขั้งตช้น โดยจะสช่งขช้อความคช้นหาเข้ชาไป คช้นหาแบบ
case sensitive โดยตกาแหนช่งเรทีิล่มจาก 0 และจะครนคาช่ -1 หากไมเช่ จอ
ตวข อย่าช ง
var str = "Hello planet earth, you are a great planet." ;
var n1 = str.lastIndexOf("planet") ;
Logger.log(n1) ; // 36.0
var n2 = str.lastIndexOf ("a") ;
Logger.log(n2) ; // 38.0
var n3 = str.lastIndexOf ("a",10) ;
Logger.log(n3) ; // 8.0
โดย วสสนั ตต์ คคณุ ดดลิ กเศวต ([email protected]) 181
20.20. toFixed
JavaScript toFixed() Method
https://www.w3schools.com/jsref/jsref_tofixed.asp
toFixed() ใช้ชแปลงตขวเลขเปป็นขอ้ช ความ และเกกบ็ ทศนิยล มตามทกร่ีท าก หนด
โครงสราช้ งการใชชง้ าน
number.toFixed(x)
พารามิเล ตอรล์
Parameter Description
x (Optional) The number of digits after the decimal point. Default is 0
(no digits after the decimal point)
ตวข อยา่ช ง
var num = 5.56789 ;
var n = num.toFixed(2) ; // 5.56
var num2 = 5.56789 ;
var n2 = num2.toFixed() ; // 6
var num3 = 5.56789 ; // 5.678900000
var n3 = num3.toFixed(10) ;
20.21. toPrecision()
JavaScript toPrecision() Method
https://www.w3schools.com/jsref/jsref_toprecision.asp
ใชจ้ช ขดรปูด แบบตวข เลข ให้ชมรีความยาวตามททีร่กกาหนด
โครงสรา้ช งการใชช้งาน
number.toPrecision(x)
พารามลิเตอร์ล
Parameter Description
x (Optional) จจานวนหลัสกของตสัวเลข ถ้คาเว้นค ว่าต งไวจ้ค ะคมืนค่ตาเปน็ป เลขดีสช้ังเดิดม ทชท่ืไมมต่ กท ารจัดส รยปแบบ
182 เซอร์วร วิส Spreadsheet
ตวข อย่าช ง // 13.3714
// 13
var num = 13.3714 ; // 13.4
var a = num.toPrecision() ; // 13.37140000
var b = num.toPrecision(2) ;
var c = num.toPrecision(3) ; // 0.001658853
var d = num.toPrecision(10) ; // 0.0017
// 0.00166
var num2 = 0.001658853 ; // 0.001658853000
var e = num2.toPrecision() ;
var f = num2.toPrecision(2) ;
var g = num2.toPrecision(3) ;
var h = num2.toPrecision(10) ;
20.22. valueOf()
JavaScript Number valueOf() Method
https://www.w3schools.com/jsref/jsref_valueof_number.asp
ครนคชา่ ตขวเลขดขั้งเดิลมกลขบมา ใช้ชกบข ข้อช มลูด เวลาจะเหน็ก ชขดเจน
var num = 15 ;
var n = num.valueOf() ; // 15
var str = "Hello World!" ;
var res = str.valueOf() ; // Hello World!
// ***********
var date = new Date("Tue Feb 11 2020 00:00:00 GMT+0700 (Indochina Time)")
var res = date.valueOf() ; // 1581354000000
โดย วสสนั ต์ต คณุค ดดิลกเศวต ([email protected]) 183
184 เซอร์วร วิส Spreadsheet
บททที่ 21
Script Properties
21.1. Script Properties คชออะไร ?
Script Properties ซีทง่ึ เปน็ป คู่ดชของ Key และ Value มีรลขกษณะเหมรอนกขบตขวแปรวตข ถชุ เราสามารถสร้ชางคดด่ชู ขง
กลช่าว เกก็บไวช้ในโปรเจ็คก Apps Script ของเราได้ช การใชงช้ านคลาช้ ยกขบการประกาศตขวแปร Global ไวชใ้ นไฟลล์
Code.gs แตช่ Script Properties เปป็นการสรา้ช งฝปงั ไวใ้ช นโปรเจค็ก เลย
ตวข อยา่ช งการใชช้งาน Script Properties เชชน่ รขนสครลิปต์ลเพที่อร ตขั้งชอร่ที Named Range แล้ชวเกก็บชรอที่ Named
Range ไวชใ้ น Script Properties เพีอทร่ ใหชส้ ครลิปต์ลอนรีท่ ๆนกาไปใช้ชต่ชอ เป็นป ตชน้
21.2. การสรช้าง Script Properties แบบกรอกค่าต เอง
การสร้ชาง Script Properties ทีทร่โปรเจ็คก Apps Script ใหช้ไปทีท่รเมนดู File → Project Properties จากนั้นข ดดู
แทบจ็ Script properties กรอกคา่ช เป็ปนคดขูช่ อง Key และ Value ตวข อย่ชางตามภาพ เช่ชน name:wasankds
เปนป็ ตน้ช
21.3. การจบบั Script Properties
คลาส PropertiesService
https://developers.google.com/apps-script/reference/properties/properties-service
getScriptProperties() - เมถอดในคลาส PropertiesService
https://developers.google.com/apps-script/reference/properties/properties-service#getscriptproperties
จขบคณชุ สมบขตลิ ทท่ีทร ุชกยูสด เซอรส์ล ามารถเขช้าถงทึ ไดช้ และอยใูดช่ นโปรเจ็กคนเัขี้ร ท่ชานขัน้
คลาส Properties
https://developers.google.com/apps-script/reference/properties/properties
getProperties() - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#getproperties
ใชจ้ช ขบ Script Properties ทขงั้ หมดในโปรเจก็ค โดยจะคนร คชา่ กลบข มาเปปน็ Object
getProperty(key) - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#getpropertykey
ใชช้จขบ Value ของ Key ท่ีทรระบชุ หากไมช่มรี Key ทรท่ีระบชุจะครนคช่า Null หากมรีจะครนคช่าเปป็น Value ในรูดปแบบ
String
getKeys() - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#getkeys
ใชจ้ช บข Keys ทขั้งหมดในคลขงของ Script Properties
186 เซอรว์ร ิสว Spreadsheet
โคด้ช ตอช่ ไปนีขั้จร ขบ Script Properties ของโปรเจก็คมา Logs ดดู
// จบสั เฉพาะ Keys โดยเก็บจ อยยตใ่ นอาเรยต์ …
//
var KEYS = PropertiesService.getScriptProperties().getKeys() ;
// จสับมาหมดทัสชง้ี ยวง ทงช้สีั Keys และ Values โดยเกบ็จ อยใ่ตย น Object
//
var PROPS = PropertiesService.getScriptProperties().getProperties() ;
Logger.log(KEYS) ; // --------------------------------- > ดยผลทชื่ท Logs [ 01 ]
Logger.log(PROPS) ; // --------------------------------- > ดผย ลทช่ทื Logs [ 02 ]
var keyName = PropertiesService.getScriptProperties().getProperty('name') ;
var keyEmail = PropertiesService.getScriptProperties().getProperty('email') ;
Logger.log('name : ' + keyName) ; // ------------------ > ดผย ลททชื่ Logs [ 03 ]
Logger.log('email : ' + keyEmail) ; // ------------------ > ดยผลทืชท่ Logs [ 04 ]
ผล
Logs
[ 01 ] [name, email]
[ 02 ] {name=wasankds, [email protected]}
[ 03 ] name : wasankds
[ 04 ] email : [email protected]
21.4. การสรชา้ ง Script Properties โดยการเขรียนสครวิปตร์
21.4.ก.) setProperty()
setProperty(key, value) - เมถอดในคลาส Properties
ใช้สช รา้ช งคูดขช่ อง Key และ Value ลงในคลงข Script Properties ของโปรเจ็คก
ตวข อย่ชาง - โค้ดช ต่ชอไปนจ้ัขีร ขบ id ของไฟล์ล Google Sheets ไปสรา้ช งเป็ปน Script Property
const id = SpreadsheetApp.getActiveSpreadsheet().getId() ;
PropertiesService.getScriptProperties().setProperty('id', id) ;
โดย วสัสนตต์ คุณค ดิลด กเศวต ([email protected]) 187
ผลเมอี่รท รขนฟงัป กช์ล ่ีขนท จะได้ช Script Property ตามภาพ
21.4.ข.) setProperties()
setProperties(properties) - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#setpropertiesproperties
setProperties(properties, deleteAllOthers) - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#setpropertiesproperties,-deleteallothers
setProperties() ใช้ชสราช้ งคดูช่ของ Key และ Value หลายๆคูดช่ ลงในคลงข Script Properties ของโปรเจ็กค
พารามเลิ ตอร์ล properties เปป็นตขวแปรวขตถุชทรีท่ร ะบชุคขู่ดช อง Key-Value จกานวนตามตอช้ งการ
พารามลิเตอรล์ deleteAllOthers เป็ปนบดูลลีรนทรีทใ่ ชรช้ ะบวุช ชา่ จะลบ Key-Value ทท่ีรมอีร ยแดูช่ ลช้วในคลงข Script
Properties หรอร ไม่ช
ตวข อยา่ช ง – สราช้ ง Script Properties 3 คดชู่ โดยลบท้งขั หมดทมรี่ท รอี ยู่ดใช นคลงข ทลิง้ัข ไปกอช่ น
var scriptProperties = PropertiesService.getScriptProperties() ;
var newProperties = { nickname: 'Bob', region: 'US', language: 'EN'} ;
scriptProperties.setProperties(newProperties,true) ;
ผล
188 เซอรวร์ วสิ Spreadsheet
21.5. deleteAllProperties() และ deleteProperty()
deleteProperty(key) - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#deletepropertykey
ใช้ลช บ Script Property ทรีรท่ ะบุช
deleteAllProperties() - เมถอดในคลาส Properties
https://developers.google.com/apps-script/reference/properties/properties#deleteallproperties
ใชลช้ บ Script Properties ทขง้ั หมดในคลขงของโปรเจก็ค
ตวข อยชา่ ง – ลบ Script Property ตวข เดยีร วแบบเจาะจง
var scriptProperties = PropertiesService.getScriptProperties () ;
scriptProperties.deleteProperty('nickname') ;
ตวข อยช่าง – ลบ Script Properties ทข้ังหมดทท่ีมร อีร ยชูดใ่ นคลขง
var scriptProperties = PropertiesService.getScriptProperties () ;
scriptProperties.deleteAllProperties() ;
โดย วสสนั ต์ต คคณุ ดลิด กเศวต ([email protected]) 189
190 เซอร์วร วิส Spreadsheet
บทที่ท 22
Regular Expression
22.1. Regular Expression คชออะไร ?
22.1.ก.) Regular Expression คอมื อะไร ?
Regular Expression เปป็นอขกขระท่รีทสามารถนกามาผสมกขน เพ่รทีอใช้ชเป็ปนแพทเทิรล ล์น ในการคช้นหา ตรวจสอบ
ทดสอบ หรอร ประมวลผลใดๆ กขบข้ชอความต้ัขงต้ชน
เครทีรอ่ งมอร ต่ชางๆใน Google Sheets เชชน่ การคนช้ หา, ฟงปั กชล์ น่ีทข ตระกดูล Regex Regular Expression ถกดู ใช้ช
ในนขั้นด้วช ย นอกจากน้ขีรั การเขรียนโปรแกรมที่ทรเกีท่รยวกขบขอ้ช ความ ไมวช่ าช่ จะภาษาใดๆ กส็ก ามารถใข้งช าน Regular
Expression ไดดช้ ้ชวย ซทึี่ง Regular Expression ถอร เป็นป เครรที่องมรอทใรี่ท ช้ชงานกนข อยาช่ งกวา้ช งขวาง และมปรี ระโยชนลม์ าก
มรหี ลายเวก็บทีใทร่ ชทช้ ดสอบ Regular Expressions Syntax เช่นช https://regexr.com/
ตามภาพ กรอบ Expression เปนป็ Regular Expression Syntax กรอบล่าช ง Text เป็ปนข้อช ความตข้ังตช้นท่รจีท ะ
ใชช้ทดสอบ Regular Expression
22.1.ข.) การใชงช้ าน Regular Expression ใน Apps Script
Regular Expression จดข เปนป็ วตข ถอชุ กีร ชนดิล นงทึ เวลาใช้งช านจะเขรยี นไวช้ในเครที่อร งหมายสแลช 2 อขน /(RE)/
เชชน่ /ABC[0-9]{5}/g (ขนึ้ชีถ ตน้ค ดคว้ ย ABC ตอ่ต ด้ควยตัวส เลขอะไรกไ็จ ด้ค 5 ตสัว) เป็นป ตนช้ Regular Expression มขกจะมีร
Expression flags ตอ่ช ทา้ช ยเช่ชน /(RE)/g ซึท่งี จะเป็นป ตขวทรีบท่ อกวชา่ Regular Expression จะถดกู แปลอย่ชางไร
g=global จะแมท Regular Expression กขบขอ้ช ความยอ่ช ย ภายในของข้ชอความตงัข้ ตนช้ ทั้งข หมด
ตวข อยา่ช ง รปดู แบบการเขรยี น Regular Expression ใน Apps Script
var regPat = /Hello.+/g ; // ประกาศตัวส แปรทชทเ่ื กบจ็ Regular Expression
var regPatInText = ".*" + "wasan" + ".*
var regPatNew = new RegExp(regPatInText,"g") ; // สรา้ค งวตสั ถุค RegExp ใหมจ่ต ากข้อค ความ
192 เซอรวร์ ิวส Spreadsheet
22.2. Regular Expression Systax ทร่ีทสาน คัญบ
อขกขระทรีท่ใชช้เปป็น Regular Expressions มรีเยอะมาก และสามารถนกามาผสมเพีทร่อใชช้งานได้ชหลากหลาย ใน
ข้อช นีขั้ร ขอยกตวข อยช่างกบางตขวทส่รีท กาคญข ๆ หรรอใช้ชบช่อยๆ
JavaScript Regular Expressions
https://www.w3schools.com/js/js_regexp.asp
JavaScript RegExp Reference
https://www.w3schools.com/jsref/jsref_obj_regexp.asp
การคช้นหาและแทนทใที่ น Google Apps
https://support.google.com/docs/answer/62754?p=spreadsheets_find_replace&visit_id=636910790117519891-447857832&rd=1
Regular Expressions Syntax
https://github.com/google/re2/blob/master/doc/syntax.txt
Regular Expressions (Java Script)
https://developer.mozilla.org/th/docs/Web/JavaScript/Guide/Regular_Expressions
Google Sheets - RegEx REGEXEXTRACT, Functions Exctract, Replace, Match Tutorial - Part 1
https://www.youtube.com/watch?v=w5B43VsJqOs
Google Sheets - Find and Replace with Functions or Without SUBSTITUTE, RegEx, Wildcards Tutorial
https://www.youtube.com/watch?v=OVzXpLJRcQk&t=544s
22.2.ก.) Regular Expression Systax ท่สีท กาคญวั
xy อกข ษร xy ผลกคก็ อร xy
. (Any char) อรกษรอะไรก็อไดช้ในตนาแหนง่ต ทีท่ระบคุ เชช่น d. ผล do, dog, dg, ads
* (zero or more) อยดหู่ช ลขงตวข อขกษรตขวไหน หมายถทงึ ตวร นน้ัร กทต่ี รวกไ็อ ดช้
เชนช่ do*g ผล dog, dg, dooog (dOg ไมไ่ช ด้ช)
+ (one or more) อย่ชูหด ลขงตวข อกข ษรตขวไหน หมายถึทง ตวร อกร ษรนร้นั อยตา่ งนอช้ ย 1 ตวร
(คลาช้ ย * แตต่ช ้ชองมรอี ย่ชางนชอ้ ย 1 ตวข ) เชน่ช do+g ผล dog, dooog (dg, dOg ไมชไ่ ด)้ช
? (optional) อยด่หชู ลขงตขวอกข ษรตวข ไหน หมายถงึท มีรหรรอไม่ชมีร อขกษรตขวนขน้ั ก็ไก ดช้
เช่ชน do?g (มีรหรรอไมช่มีร o กก็ได้ช) ผล dog, dg (dOg, doug ไมไ่ช ด)ช้
^ (start with) อย่ชูเด รลิ่มที ตน้ช Regular Expression หมายถึงท ประโยคเรีท่มม ต้ชนดวช้ ย
(เฉพาะใน Google Sheet เทช่านนั้ข ) เช่ชน ^[dh]og ผล dog, hog (A dog, his hog ไม่ไช ด)้ช
$ (end with)อยจูด่ช ดชุ สุดช ทาช้ ยของ Regular Expression หมายถทึง ประโยคลงท้ชายดวช้ ย
เชช่น [dh]og$ ผล dog, hog, hot dog (dogs, hogs, doggy ไมไ่ช ด้ช)
\ (escape) อยดูกช่ ช่อนอกข ขระหมายถึงท อกข ขระตขวนนขั้ มกข ใชชก้ บข อขกขระพิเล ศษ เชช่น \.
โดย วสสันต์ต คคณุ ดิลด กเศวต ([email protected]) 193
{A,B} อยชหูด่ ลขงตวข อกข ษรตวข ไหน หมายถทงึ ซันา้ร อกร ษรตวร นน้ัร A ถงึท B คร้ังร
[x], [xa], [xa5] เช่ชน d(o{1,2})g ผล dog, doog (dg, dOg, doog ไมช่ไดช้)
[0-9]{1,} - ตวข เลขยาวตดลิ กนข กตทีร่ ขวกกไ็ ด้ช เชชน่ 12, 123, 4567
(match) ตวร ใดตรวหนึีท่งทอ่ีท ยตู่ใส น [ ]
เชน่ช d[ou]g ผล dog, dug (dg, dOg, doog, doug ไมไ่ช ด้ช)
[a-z] ตวร ใดตวร หนทงึ่ี ท่ทอี ยูสตร่ ะหว่ตาง ช่วต งทีท่ระบคุใน [ ]
เชนช่ d[o-u]g ผล dog, dug, dpg, drg (dg, dOg, dag ไม่ชได)ช้
[^a-fDEF] ตช้องไมมต่ ตท วร อรกษรตวร ใดตวร หนีทึ่งททร่ี ะบใุค น [ ]
| (or) เช่ชน d[^aeu]g ผล dog, dOg, dig, d$g (dg, dag, deg, dug ไมไช่ ดช้)
หรรอ
() จบร กลคุต่มทที่อยตูส่ใน ()
(?:re) = ?: อยดูช่ใน () กคก็ รอ ไมต่เอากลุ่คตมน้ัทร
(re)? = ()? อยูช่หด ลขงกลุ่ชม กค็ก อร Optional มรีก็เก อา ไม่มช รกี ็กไม่ชเอา
Escape sequences ( \ )
\d digits (== [0-9]) ตวข เลข
\D not digits (== [^0-9]) ไม่ชใชต่ช วข เลข
\s whitespace (== [\t\n\f\r ]) สเปซ เชน่ช d\sg ผล d g, d[tab]g (dg, dog ไมไ่ช ดช้)
\S not whitespace (== [^\t\n\f\r ]) ไมใ่ช ชชส่ เปซ
\w word characters (== [0-9A-Za-z_]) Alphanumatic หรรอ ตวร อกร ษรและตวร เลข
\W not word characters (== [^0-9A-Za-z_])
22.2.ข.) การผสม Regular Expression ท่ทนี ่ทาสนใจ
aaa
ไม่ชมีร Regular Expression คชน้ หา aaa
..
อกข ษร 2 ตวข
...
อกข ษร 3 ตวข ผลเช่ตน Abc, Axx
\.
เครทชีอ่ งหมายจดุค ถา้ช ใช้โช ดดๆหมายถึทงอขกษรอะไรกไก็ ดช้ 1 ตวข แตถต่ าช้ ใช้ชกบร \ หมายถึงท อกร ขระท่เีท ป็ปน
เครทชี่องหมายจดคุ นอกจากนัรข้กี ยก็ ขงมรี \( , \) , \? , \+ , \\ , \^ , \$ , \[ , \] , \| , ซีง่ทึ เหลชา่ นีข้เรั ปปน็ Special
characters
194 เซอร์วร สิว Spreadsheet
A+
A กต่รีท วข ก็ไก ดช้ ผลเชน่ต A, AA, AAA
.+
อกัว ษรอะไรกไ็ก ดช้ กตีท่ วัว กไ็ก ด้ช แตชอ่ ย่ชางนชอ้ ย 1 ตวข ผลก็คอ ชอ ขอ้ช ความทรง้ั หมดแมช้มทชต่องวาต่ งก็ตอ าม
.*
อกข ษรอะไรกไ็ก ดช้ กตีรท่ ขวก็กได้ช 0 ตวข กไ็ก ดช้ ผลก็คอ ชอ ข้ชอความท้ังร หมดแมม้ช ทชอ่ต งวา่ต งกต็อ าม
A.+
ข้ชอความทข่ีรท นขั้ ตช้นดวช้ ย A ผลเช่ตน Amily Checking, Alaska Airline
A.+|B.+
ข้ชอความทรี่ขท น้ัขทึ ต้ชนดวช้ ย A หรอร B ผลเช่ตน Alpha Channel, Ben Tema,
(A.+)|(B.+)
ข้อช ความท่ขรีท น้ทึขั ต้ชนดว้ช ย A หรรอ B ผลทีไ่รท ดจ้ช ะแยกคอลมข น์ล
ผลเชนท่ คอลมัว นท์ร ่ีท 1 (กล่ทุมทท่ี1) คอลมัว น์ทร ี่ท 2 (กลทุ่มที่ท2)
(วาท่ ง) Ben Tema
Alpha Channal (วา่ท ง)
((A.+)|(B.+))
ขอ้ช ความทที่ขร ทึขั้นตชน้ ดวช้ ย A หรอร B ผลททีไร่ ด้จช ะแยกคอลขมน์ตล ามจกานวนกลุช่ม มรี 3 กลุ่ชม ตามทรรท่ี ะบชุ กค็ก รอ (()())
ผลเชนท่ คอลมวั น์ทร ท่ี 1 (กลทมุ่ ทท่ี1) คอลมวั น์ทร ีท่ 2 (กลท่มุ ทีท่2) คอลมัว นท์ร ่ที 3 (กลมุ่ท ทท่ี2)
Ben Tema (วา่ท ง) Ben Tema
Alpha Channal Alpha Channal (ว่าท ง)
((?:A.+)|(?:B.+))
เหมรอนก่อช นหนชา้ แตไ่ช ม่ชเอากลช่มุ ททรี่มรี ?: อยู่ขดช า้ช งหน้ชา ฉะน้ัขนจะเหลรอเฉพาะกลช่มุ ข้ชางนอกหรรอกลชุม่ ที่ทร 1 อยาช่ ง
เดรยี ว
ผลเชตน่ คอลมร น์พทที่ 1 (กลตุค่มทท่ี1)
Ben Tema
Alpha Channal
[A-Z]+
A-Z ตวข ได้ชกไก็ ดช้ ตดลิ กนข กตีท่ร วข กไ็ก ด้ช ผลเชต่น A, F, AA, ฺBA, CFD, ABCD (ตวข เลก็ก ไม่ไช ด้ช)
[a-zA-Z._-]+
อขกขระ a-z, A-Z, . , _ , - กีทต่ร วข ตดิล กนข ก็กไดช้
เชนช่ ถชา้ ใช้กช บข อีรเมล์ล จะตดข ชทอร่ี จากอรเี มล์ล ผลเชตน่ wasan, kds.wasan, suwaj, wannee, Family
\w
อขกษร Alphanumatic 1 ตวข เทีรยบเทชา่ [0-9A-Za-z_] ผลเชต่น A, B, a, 5, _
\w+
อขกษร Alphanumatic กตีท่ร ขวกไ็ก ด้ทช ต่ีรท ิลดกนข ผลก็อคชอ ขอ้ช ความ 1 คาน (ตรดททีช่ ่ตองวา่ต ง)
โดย วสัสนต์ต คณคุ ดดิลกเศวต ([email protected]) 195
\w+$
อกข ษร Alphanumatic กทีรต่ วข ก็ไก ดทช้ รตที่ ลิดกขน ทกาจากขช้างหลขง ผลกคอ็ อช ขช้อความ 1 คาน ด้ชานหลรง
\w+\s\w
อกข ษร Alphanumatic 2 คาก ท่รตีท ดิล กนข (เวน้ช ด้วช ยช่ชองวาช่ ง)
@[A-Za-z0-9-]+\.[A-Za-z]+
ถ้าช ใชก้ช บข อรีเมล์ล จะตขดโดเมนขช้างหลงข ออกมา ใชช้ไดกช้ ขบแบบจดุช เดีรยว
ผลเชตน่ @gmail.com, @snp.gmail (มรี . 2 อนข หลงข @ มาแคต่ช ขวแรกตวข เดรยี ว)
@[A-Za-z0-9-]+\.[A-Za-z]+\.[A-Za-z]
ถช้าใชก้ช บข อรีเมลล์ จะตดข โดเมนข้ชางหลงข ออกมา ใช้ไช ดชก้ บข แบบ 2 จดุช
ผลเช่ตน @snp.gmail.com (@gmail.com ไมไช่ ดช้ )
(@[A-Za-z]+\.[A-Za-z]+\.[A-Za-z]+)|(@[A-Za-z]+\.[A-Za-z]+)
Regex ชุคดแรก ตขดโดเมนขช้างหลขงออกมา ใชช้ได้ชกขบแบบ 2 จุชด Regex ชคุดหลรง ตขดโดเมนข้ชางหลขงออก
มา ใชไช้ ด้กช ขบแบบจดชุ เดรียว ลาน ดรบมทความสาน ครญ ถช้าเจอ Regex ชชุดแรกแล้ชว จะไมช่ทาก ชชุดหลขง จะทกา Regex ชุดช
หลขงเมที่อร ตวข แรกไมเช่ จอ
ผลเช่นต คอลรมนพ์ทที่ 1 (กลมุค่ต ท่ที1) คอลรมนพ์ทีท่ 2 (กลมุ่คต ทท่ี2)
(วต่าง) @gmail.com
@snp.gmail.com (วต่าง)
(วา่ต ง) @snpfood.com
@yahoo.thai.com (วาต่ ง)
(?:@[A-Za-z]+\.[A-Za-z]+\.[A-Za-z]+)|(?:@[A-Za-z]+\.[A-Za-z]+) หรรอ
แบบไมใ่ช ชชว้ งเล็กบ
@[A-Za-z]+\.[A-Za-z]+\.[A-Za-z]+|@[A-Za-z]+\.[A-Za-z]+
เหมรอนขช้างบน แต่เช อามาอนข ใดอนข หนงึท่ี เฉพาะอขนททีร่เจอ
ผลเชนท่ คอลวมั นรท์ ีท่ 1
@gmail.com
@snp.gmail.com
@snpfood.com
@yahoo.thai.com
@[A-Za-z]+((?:\.[A-Za-z]+\.[A-Za-z]+)|(?:\.[A-Za-z]+))
เหมรอนข้ชางบน แตช่ ((?:RE)(?:RE)) ม3รี กลชมุ่ ไม่ชเอากล่ชุมที่รทมีร ?: จึทงเหลรอกลมุช่ นอกสุชดอขนเดรียว ผลทรที่ไดกช้ ็กครอ
เฉพาะ .com หรรอ .co.th (อยู่ชหด ลงข 1 หรรอ 2 จดุช )
ผลเชนท่ คอลวมั นรท์ ท่ี 1
.com
.gmail.com
.com
.thai.com
196 เซอร์รววสิ Spreadsheet
22.3. การคน้ช หาและแทนทรโท่ี ดยใช้ช Regular Expression
ขช้อนรขี้ัไมช่เกรีท่ยวกขบ Google Apps Script แต่ชเกรี่ทยวกขบ Google Apps ท่รีทสกา คขญๆ เช่ชน Google Sheets,
Google Docs
เราสามารถใชเ้ช ครอีทร่ งมรอ Find and replace ในการค้ชนและแทนทที่ร โดยใชช้ Regular Express ได้ชดวช้ ย
ยกตขวอย่ชางใน Google Docs ไปท่ีทรเมนดู Edit → Find and replace ( <Ctrl><H>) จะปรากฎหน้ชาต่ชาง
Find and replace ตามภาพ จากนข้ันให้ช ตก๊ิวต ที่ท Match using regular expressions
22.4. RegExp()
JavaScript RegExp Reference
https://www.w3schools.com/jsref/jsref_obj_regexp.asp
เราไม่สช ามารถ ใสชต่ ขวแปรรวมกบข Regular expression syntax ได้ช วธิล แีร ก้ชก็กคอร สรา้ช ง Regular
expression syntax ตวข ใหม่ชจากวขตถุช RegExp
ตวข อย่ชาง
var textToSearch = "Hello world" ;
var regPatText = 'w'+ '.*' ;
// สร้คาง RegExp ตัสวใหมต่ จากตัสวแปร
var regPatNew = new RegExp(regPatText, "gi") ;
var posFound = textToSearch.search(regPat) ;
Logger.log(posFound) ; // 6
โดย วสสันต์ต คคุณดิดลกเศวต ([email protected]) 197
22.5. exec()
JavaScript exec() Method
https://www.w3schools.com/jsref/jsref_regexp_exec.asp
RegExp.prototype.exec()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
exec(str) เปป็น Built-in ฟปงั กชล์ ทขี่น ใช้จช ขบการแมทของ RegExp กบข String (ขชอ้ ความ) โดยจะครนคา่ช
String[]-กอค้ นอาเรยข์ต อง String ท่ทแชื มท หากไม่เช จอคา่ช ทีท่รแมท จะคนร คา่ช null
โครงสราช้ ง
RegExpObject.exec(string)
ตวข อยา่ช งท่ีทร 1
var str = "The best things in life are free" ;
var patt = new RegExp("e") ;
var res = patt.exec(str) ;
Logger.log(res) ; // [e]
ตวข อยา่ช งทร่ที 2 // [Hello]
// null
// The string :
var str = "Hello world!" ;
// Look for "Hello"
var patt = /Hello/g ;
var result = patt.exec(str) ;
Logger.log(result) ;
// Look for "W3Schools"
var patt2 = /W3Schools/g ;
var result2 = patt2.exec(str) ;
Logger.log(result2) ;
ตวข อยาช่ งทรีท่ 3 - โคดช้ ตอ่ช ไปนรีข้ดั ดชู นลิดของ Regular Expression
var regex1 = /\w+/ ;
var regex2 = new RegExp('\\w+') ; // RegExp ใชส้ค รค้าง regular expression
Logger.log(typeof regex1) ; // ดผย ลททช่ื Logs –-----------> [1]
Logger.log(regex1) ; // ดผย ลทท่ืช Logs –-----------> [2]
Logger.log(typeof regex2) ; // ดผย ลททชื่ Logs –-----------> [3]
Logger.log(regex2) ; // ดผย ลทื่ทช Logs –-----------> [4]
198 เซอร์รววสิ Spreadsheet
ผล
Logs
[01] object
[02] /\w+/
[03] object
[04] /\w+/
ตวข อยา่ช งทีท่ร 4 - โคด้ช ตอ่ช ไปนั้ใีรข ช้ช Regular Expression เป็นป แพทเทริล ์นล ในการคช้นหาขอ้ช ความ
function myFunction() { // ขอ้ค ความเร่มดิืช ตค้น
// RE
var text = '[email protected]';
var regex = /[@].+/; // ใช้ค RE เป็นป แพทเทรดิ นต์ ในการคนค้ หาขอ้ค ความ
var match = regex.exec(text);
Logger.log(typeof match);
Logger.log(match);
}
ผล
Logs
[01] object
[02] [@gmail.com]
22.6. test()
RegExp.prototype.test()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
เมถอด test() ใชชท้ ดสอบ Regular Expression กบข String ทร่รที ะบชโุ ดยจะครนคช่า true หรรอ false
โครงสรช้างการใช้ชงาน
regexObj.test(str)
พารามเิล ตอรล์ str กค็ก รอ String ทรใ่ที ชท้ช ดสอบ Regular Expression
ตวข อย่าช งทีท่ร 1
const str = 'hello world!' ;
const result = /^hello/.test(str) ;
console.log(result) ; // true – จับส /^hello/ ใน String ได้ค
โดย วสสนั ตต์ คคุณดลิด กเศวต ([email protected]) 199
ตวข อยา่ช งท่ีรท 2
var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/ ; // ใชเค้ ปปน็ /m
return regex.test(email) ; // ถคา้ เปน็ป email คนมื ค่าต true
200 เซอรว์ร ิสว Spreadsheet