การส่งไฟล์แบบ Top Secret!

ปิด Google Sheets : GASWS1 เมนู Tools > Script Editor… เมนู File > New > Script File ตั้งชื่อ: myscript6 สร้าง function MailMerge4() ตามนี้ function MailMerge4() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName(“Salary”)), TemplateID=’1bjpQnJikYMGYNaJQhetpZpkHyjI7iqBqDufprzMSo4k’, header = “A1:G1″, data=”A2:G6”, dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(), emailaddress= “”, subject = “”, docUrl = “”; for (var i=0 ; i < dataRows.length ; i++) { emailText=””; subject = “[ลับ] กองคลัง : แจ้งการโอนเงินให้คุณ ” + dataRows[i][0] + ” ” + dataRows[i][1]; var id =DriveApp.getFileById(TemplateID).makeCopy(subject).getId(), doc=DocumentApp.openById(id), docBody=doc.getBody(); for (var j = 0 ; j < numColumns -1 ; j++) { docBody.replaceText(‘{‘ + headerRow[0][j] + ‘}’ , dataRows[i][j]); } emailaddress=dataRows[i][2]; doc.addViewer( emailaddress); docUrl=doc.getUrl(); doc.saveAndClose(); var attachment = DocumentApp.openById(id); MailApp.sendEmail( emailaddress, subject , “เปิดอ่านเอกสารลับได้ที่ \n” + docUrl ); try { dataRows[i][numColumns-1] = new Date(); } catch (e) { dataRows[i][numColumns-1] = e.message; } } SalarySheet.getRange(data).setValues(dataRows); } เมนู File > Save หรือ กดปุ่ม Ctrl+s เมนู Run > MailMerge4 สร้าง function MailMerge5() ตามนี้ function MailMerge5() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName(“Salary”)), TemplateID=’1WzzAwF5cDtQD0kcrLKRdP0ZO6-6MCqc_VXRUxzgq_gI’, header = “A1:H1″, data=”A2:H6”, dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(), emailaddress= “”, subject = “”, docUrl = “”; for (var i=0 ; i < dataRows.length ; i++) { emailText=””; subject = “[ลับสุดยอดดดดด] กองคลัง :

Read More »

การส่ง email ถึงผู้รับตามที่กำหนด พร้อมแนบข้อความ/ไฟล์ที่ต้องการ

ปิด Google Sheets : GASWS1 เมนู Tools > Script Editor… เมนู File > New > Script File ตั้งชื่อ: myscript6 สร้าง function MailMerge3() ตามนี้ function MailMerge3() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName(“Salary”)), TemplateID=’1bjpQnJikYMGYNaJQhetpZpkHyjI7iqBqDufprzMSo4k’, header = “A1:G1″, data=”A2:G6”, dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(), emailText = “”; for (var i=0 ; i < dataRows.length ; i++) { emailText=””; var id =DriveApp.getFileById(TemplateID).makeCopy(“กองคลัง : แจ้งการโอนเงินให้คุณ ” + dataRows[i][0] + ” ” + dataRows[i][1]).getId(), doc=DocumentApp.openById(id), docBody=doc.getBody(); for (var j = 0 ; j < numColumns -1 ; j++) { docBody.replaceText(‘{‘ + headerRow[0][j] + ‘}’ , dataRows[i][j]); } emailText=docBody.getText(); doc.saveAndClose(); var emailaddress=dataRows[i][2], subject = “กองคลัง : แจ้งการโอนเงินให้คุณ ” + dataRows[i][0] + ” ” + dataRows[i][1], attachment = DocumentApp.openById(id); MailApp.sendEmail( emailaddress, subject , emailText, { attachments: [attachment.getAs(MimeType.PDF)] } ); try { dataRows[i][numColumns-1] = new Date(); } catch (e) { dataRows[i][numColumns-1] = e.message; } } SalarySheet.getRange(data).setValues(dataRows); } เมนู File > Save หรือ กดปุ่ม Ctrl+s เมนู Run > MailMerge3

Read More »

การสร้างไฟล์ PDF จากข้อความที่ต้องการ

เปิด Google Sheets : GASWS1 เมนู Tools > Script Editor… เมนู File > New > Script File ตั้งชื่อ: myscript6 สร้าง function MailMerge2() ตามนี้ function MailMerge2() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName(“Salary”)), TemplateID=’1bjpQnJikYMGYNaJQhetpZpkHyjI7iqBqDufprzMSo4k’, header = “A1:G1″, data=”A2:G6”, dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(); for (var i=0 ; i < dataRows.length ; i++) { var id =DriveApp.getFileById(TemplateID).makeCopy(“กองคลัง : แจ้งการโอนเงินให้คุณ ” + dataRows[i][0] + ” ” + dataRows[i][1]).getId(), doc=DocumentApp.openById(id), docBody=doc.getBody(); for (var j = 0 ; j < numColumns -1 ; j++) { docBody.replaceText(‘{‘ + headerRow[0][j] + ‘}’ , dataRows[i][j]); } doc.saveAndClose(); var pdfFile = DriveApp.createFile(doc.getAs(MimeType.PDF)); try { dataRows[i][numColumns-1] = new Date(); } catch (e) { dataRows[i][numColumns-1] = e.message; } } SalarySheet.getRange(data).setValues(dataRows); } เมนู File > Save หรือ กดปุ่ม Ctrl+s เมนู Run > MailMerge2

Read More »

แทนที่ข้อความ ด้วยค่าใน Google Sheets

เปิด 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

Read More »

เทคนิคการอ่านค่าจากเว็บไซต์ที่มีการเปลี่ยนแปลง (ราคาหุ้น) มาเก็บไว้บน 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 เป็นอันเรียบร้อย ผลที่ได้

Read More »