- เปิด Google Sheets : GASWS1
- สร้าง Sheet ใหม่ ชื่อ “Salary”
- ใส่ข้อมูล
A1 = “Firstname”
B1=”Lastname”
C1=”Email”
D1=”SalaryDetail”
E1=”Salary”
F1=”TransferDate” - จากนั้น ให้กรอกข้อมูลต่างๆ จำนวน 5 แถว ดังภาพ
- สร้าง Sheet ใหม่ ชื่อ “Template”
- ใส่ข้อมูล
A1: เรียน คุณ{Firstname} {Lastname}
A2: จะมี {SalaryDetail} จำนวน {Salary} บาท โอนให้คุณในวันที่ {TransferDate}
A3: จึงเรียนมาเพื่อทราบ
A4: การเงิน - เมนู Tools > Script Editor…
- เมนู File > New > Script File
ตั้งชื่อ: myscript5
เขียนโค๊ดตามนี้function MailMerge1() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Salary")), TemplateSheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Template")), header = "A1:G1", data="A2:G6", template="A1:A4", dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(), templateRows= TemplateSheet.getRange(template).getValues(); for (var i=0 ; i < dataRows.length ; i++) { var newText = templateRows[0][0] + "\n" + "\t" + templateRows[1][0] + "\n" + "\t" + templateRows[2][0] + "\n" + templateRows[3][0] + "\n"; for (var j = 0 ; j < numColumns -1 ; j++) { newText = newText.replace('{' + headerRow[0][j] + '}', dataRows[i][j]); } try { dataRows[i][numColumns-1] = new Date(); } catch (e) { dataRows[i][numColumns-1] = e.message; } Logger.log(newText); } SalarySheet.getRange(data).setValues(dataRows); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > MailMerge1
- ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter
Author: kanakorn.h
-
แทนที่ข้อความ ด้วยค่าใน Google Sheets
-
เทคนิคการอ่านค่าจากเว็บไซต์ที่มีการเปลี่ยนแปลง (ราคาหุ้น) มาเก็บไว้บน Google Sheets
มีโจทย์ว่าต้องการคำนวนค่า Indicator ชื่อ RSI ของกองทุนรวมในต่างประเทศ ซึ่งปิดการซื้อขายเวลา 04:00 ของเวลาในประเทศไทย ทางกองทุนจะประกาศราคา (NAV) ในเวลาประมาณ 09:00 แต่ในการตัดสินใจลงทุน จะต้องพิจารณาค่า RSI ซึ่งกองทุนจะคำนวนและประกาศให้ประมาณ 12:00 ซึ่งบางทีก็หลงลืม และไม่ทันการ
การคำนวนค่า RSI ใช้ค่าการเปลี่ยนแปลงของราคา แบ่งเป็น Gain และ Loss แล้วมาหาค่าเฉลี่ยและเข้าสูตรคำนวน (ไม่ขอกล่าวถึง หากต้องการทราบข้อมูลเพิ่มเติม อ่าน http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:relative_strength_index_rsi)
สรุปคือ หากต้องการทราบค่า RSI ก่อนที่ทางกองทุนจะประกาศให้ ก็ต้องคำนวนเอง โดยจดค่าการเปลี่ยนแปลงของราคาในแต่ละวันซึ่งเป็นงานที่น่าเบื่อ จึงต้องหาวิธีลดภาระ
แนวคิดคือ เว็บไซต์ http://www.bloomberg.com/quote/WGHCEPA:ID ซึ่งจะประกาศราคา NAV ในเวลา 09:00 นั้น หากเปิด HTML ดูจะพบว่าข้อมูลที่ต้องการจะอยู่ในรูปแบบของ
... <meta itemprop="price" content="46.92"> ... <meta itemprop="priceChange" content="0.16"> ... <meta itemprop="priceChangePercent" content="0.34"> ... <meta itemprop="quoteTime" content="2015-05-11T00:59:30-0400">
จากนั้น สร้าง Function ตามนี้
function getWGHCEPA(){ var content=UrlFetchApp.fetch("http://www.bloomberg.com/quote/WGHCEPA:ID"); //'<meta itemprop="priceChange" content="0.16">'; var data = content.getContentText().match(/meta itemprop="(.*)" content="(.*)"/mg ); var id="xxxxxxxxxxxxxxxxxxxx Your file ID xxxxxxxxxxxxxx"; var db=SpreadsheetApp.openById(id); var table=db.setActiveSheet(db.getSheetByName("Data")); var result=[]; for (var i=0; i<data.length; i++){ var temp=data[i].match(/meta itemprop="(.*)" content="(.*)"/); result[temp[1]]=temp[2]; } table.appendRow([result["quoteTime"], result["price"], result["priceChange"], result["priceChangePercent"]]); }
จากนั้น ตั้ง Trigger ให้ทำงานวันละครั้ง เวลาตั้งแต่ 09:00-10:00 เป็นอันเรียบร้อย
ผลที่ได้
-
ชีวิตสะดวกและปลอดภัยด้วยการ Sign In บน Google Chrome
เคยเจอปัญหาเหล่านี้เมื่อต้องไปใช้งานเครื่องอื่นที่ไม่ใช่เครื่องตนเองหรือไม่ ?
- จะเข้าเว็บไซต์ที่เคย Bookmark เอาไว้ในเครื่องตนเอง ก็ทำไม่ได้
- ทำไงดีรหัสผ่านมากมาย เคยให้เว็บจำไว้ให้ แล้วตอนนี้จะใช้งานยังไงหล่ะ
- สภาพแวดล้อมไม่คุ้นชินเมื่อไปใช้เครื่องอื่น
ปัญหาเหล่านี้จะหมดไป เมื่อใช้ Google Chrome และ ทำการ Sign In เอาไว้
คำเตือน:
- ผู้ที่จะใช้วิธีการนี้ ควรทำระบบ 2-Step Verification ไว้ก่อน เพื่อป้องกันรหัสผ่านรั่วไหล และป้องกัน กรณีมี Keyboard Logger ฝังตัวเพื่อดักการพิมพ์รหัสผ่านจาก Keyboard ซึ่งแม้จะมีผู้ร้ายดักรหัสผ่านไปได้ ก็จะติดขั้นตอนการยืนยันตัวตนอีกชั้นของ 2-Step Verification
- กรณีผู้ใช้ Google Apps ขององค์กร (ทั้ง For Education และ For Business) ระบบจะทำการสร้าง Profile แยกให้ แต่ถ้าเป็น Google Account ของ Gmail นั้น จะต้องทำการ Create Profile เอง แล้วจึง Sign In เข้าไป มิฉะนั้นข้อมูลของเราจะไปปะปนกับของผู้ใช้ทั่วไป ซึ่งไม่ปลอดภัยอย่างยิ่ง
- วิธีการนี้ ผู้ใช้ต้อง “Remove This Person” ทุกครั้งเมื่อจบการใช้งาน (จะอธิบายต่อไป)
วิธีการใช้งาน
- เปิด Google Chrome ขึ้นมา
- ด้านขวามือบน ใกล้ๆ Tools Box คลิกรูป “คน” ดังภาพ แล้วคลิก Sign in to Chrome
- ใส่ Google Account (Gmail Account) หรือ Google Apps Account (Google Apps For Education/Business) และรหัสผ่าน จากนั้นคลิก Sign In สำหรับท่านที่ทำ 2-Step Verification จะพบหน้าต่างให้ใส่ Code ก็ให้ดำเนินการตามปรกติไป
- สำหรับบัญชี Google Apps ขององค์กร จะแสดงหน้าต่างให้เลือกว่า จะสร้าง Profile ใหม่หรือไม่ แนะนำให้คลิกปุ่ม Create a new profile
- ต่อไป คลิกปุ่ม “Ok, got it”
- ใช้เวลาไม่นาน ระบบจะ Sync ข้อมูล Apps, Autofill, Bookmark, Extensions, History, Password, Settings, Themes, Opentabs มาให้ (สามารถเลือกได้ว่าจะ Sync อะไรมาบ้างได้) และทำการเข้ารหัส รหัสผ่านไว้ด้วย (เลือกได้ว่าจะเข้ารหัสด้วย Google Credential หรือจะสร้าง Paraphrase แยกต่างหาก — ในที่นี้ เลือกเป็น Google Credential) คราวนี้ ก็จะสามารถใช้งานได้เหมือนนั่งอยู่ที่เครื่องตนเองอีกทั้งวิธีการนี้ จะสามารถใช้งานได้ทั้งบน Smartphone และ Tablet ได้ด้วย ทำให้เมื่อ Save Bookmark เอาไว้บนคอมพิวเตอร์ ก็สามารถไปเปิดดูได้บน Tablet ได้ทันที
- เมื่อเลิกใช้งาน ให้ทำตามข้อ 2. แล้วคลิก Switch User แทน จากนั้น ที่รูป Profile ด้านมุมขวา คลิก Remove this person
- คลิก Remove this person อีกครั้งเพื่อยืนยัน
- เท่านี้ ข้อมูลก็จะปลอดภัยแล้ว 😉
- หากต้องการปรับแต่งเรื่อง สิ่งที่ต้องการจะ Sync ให้เปิด chrome://settings/syncSetup แล้วเลือกสิ่งต่างๆได้ตามต้องการ
- สลับหลาย user ได้แบบไม่ต้องกลัวว่าระบบ Single Sign-On จะตีกัน 😉 เพราะแยก Profile ออกไปชัดเจน ไม่ต้องคอย Login – Logout ข้ามไปมาตลอดเวลา
ชีวิตดี๊ดี 😉
หวังว่าจะเป็นประโยชน์ครับ
-
เริ่มต้นใช้งาน GAS Editor
- เปิด https://drive.google.com แล้ว Login
- คลิกปุ่ม New > Google Sheets
- ตั้งชื่อไฟล์: GASWS1
- เมนู Tools > Script Editor
- เลือก Blank Project
- ตั้งชื่อโปรเจค : myproject1
- เมนู File > New > Script File
- ตั้งชื่อ: myscript1
- แก้ไข myFunction() ตามนี้
function myFunction() { Logger.log("Hello World"); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > myFunction
- ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter
- สร้าง function myForLoop ดังนี้
function myForLoop(){
for (var i=1; i<=10 ; i++) {
myFunction();
}
}- แล้ว Save ด้วย กดปุ่ม Ctrl+s
- เมนู Run > myForLoop
- ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter
- เมนู File > New > Script File
- ตั้งชื่อ myscript2
- สร้าง function myDate ดังนี้
function myDate() {
Logger.log(new Date());
}- แล้ว Save ด้วย กดปุ่ม Ctrl+s
- เมนู Resources > All yours triggers
- คลิก No triggers set up. Click here to add one now.
- ตั้งค่า
Run = myDate
Event = Time-driven
แล้วเลือกเป็น Minutes timers และ Every minute
จากนั้นคลิกปุ่ม Save - ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter
-
Case Study: ตรวจสอบ Website Availability ด้วย Google Apps Script
- เปิด Google Sheets : GASWS1
- สร้าง Sheet ใหม่ ชื่อ “Log”
- เมนู Tools > Script Editor…
- เมนู File > New > Script File
- ตั้งชื่อ: myscript4
- เขียนโค๊ดตามนี้
function check_website(url) { var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); return response.getResponseCode(); } function doLog(timestamp, responseCode, timeDiff) { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Log")); sheet.appendRow([timestamp, responseCode, timeDiff]); } function getTime() { var startTime = new Date() ; var responseCode=check_website("http://www.psu.ac.th"); var endTime = new Date() ; var timeDiff = endTime-startTime; doLog(Utilities.formatDate(new Date(), "GMT+7", "yyyyMMdd-HHmmss") , responseCode , timeDiff); }
- เมนู Resources > All yours triggers
คลิก No triggers set up. Click here to add one now.
ตั้งค่า
Run = getTime
Event = Time-driven
แล้วเลือกเป็น Minutes timers และ Every minute
จากนั้นคลิกปุ่ม Save
-
อ่าน/เขียนข้อมูลกับ Google Sheets
- เปิด Google Sheets : GASWS1
- เมนู Tools > Script Editor…
- เมนู File > New > Script File
- ตั้งชื่อ: myscript3
- สร้าง function insertData1() ตามนี้
function insertData1() { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet1")); sheet.getRange(1, 1).setValue("Hello World"); sheet.getRange("A2").setValue("สวัสดี"); var v1=[ ["ชื่อ","นามสกุล","อายุ"] ]; var v2=[ ["สมชาย"] ,["Robert"] ,["39"] ]; sheet.getRange("A3:C3").setValues(v1); sheet.getRange("A4:A6").setValues(v2); }
- เมนู Run > insertData1
- สร้าง function insertData2() ตามนี้
function insertData2() { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet1")); sheet.appendRow([new Date(),"something"]); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > insertData2
- เมนู Resources > All yours triggers
คลิก No triggers set up. Click here to add one now.
ตั้งค่า
Run = insertData2
Event = Time-driven
แล้วเลือกเป็น Minutes timers และ Every minute
จากนั้นคลิกปุ่ม Save - ไปที่ Google Sheets “GASWS1”
- สร้าง Sheet ใหม่ ชื่อ “ReadData”
- เมนู Tools > Script Editor…
- สร้าง function readData1() ตามนี้
function readData1(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("ReadData")); var url="https://docs.google.com/spreadsheets/d/1oztRXjC2KJzrqC3LtiRnUPrEgohX4VTYHixylvtCdzY/edit?usp=sharing"; var db=SpreadsheetApp.openByUrl(url); var table=db.setActiveSheet(db.getSheetByName("WGHCEPA")); var data=table.getRange("A1:J10").getValues(); for (var i=0; i<data.length;i++){ sheet.appendRow(data[i]); } }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > readData1
- สร้าง function readData2() ตามนี้
function readData2(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("readData")); var id="1oztRXjC2KJzrqC3LtiRnUPrEgohX4VTYHixylvtCdzY"; var db=SpreadsheetApp.openById(id); var table=db.setActiveSheet(db.getSheetByName("WGHCEPA")); var data=table.getDataRange().getValues(); for (var i=0; i<data.length;i++){ sheet.appendRow(data[i]); } }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > readData2
- สร้าง function insertData3() ตามนี้
function insertData3(){ var url="https://docs.google.com/a/psu.ac.th/spreadsheets/d/1bQyyQrB3PPyawWVb3afMi0Kgz1KUibIfMblv351BtQI/edit?usp=sharing"; var db=SpreadsheetApp.openByUrl(url); var table=db.setActiveSheet(db.getSheetByName("Sheet1")); // เปลี่ยนเป็น ชื่อ นามสกุล และคณะ/หน่วยงานของท่าน var mydata=["ชื่อ","นามสกุล","คณะ/หน่วยงาน"]; table.appendRow(mydata); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > insertData3
-
Google Apps Scripts Workshop – Level 1
- เริ่มต้นใช้งาน GAS Editor
- อ่าน/เขียนข้อมูลกับ Google Sheets
- Case Study: ตรวจสอบ Website Availability ด้วย GAS
- แทนที่ข้อความ ด้วยค่าใน Google Sheets
- การสร้างไฟล์ PDF จากข้อความที่ต้องการ
- การส่งอีเมลถึงผู้รับตามที่กำหนด พร้อมแนบข้อความ/ไฟล์ที่ต้องการ
- การส่งไฟล์ทางอีเมลแบบ Top Secret!
- การแสดงผลจำนวน Quota การส่งอีเมลที่ยังเหลืออยู่ในรอบ 24 ชั่วโมง