เขียน script ให้กับ Google Doc Spreadsheet สร้างตารางรายการช่วงวันในหนึ่งสัปดาห์

Google Doc Spreadsheet (ต่อไปจะขอเรียกว่า Spreadsheet) เป็นบริการหนึ่งในชุด อาจกล่าวได้ว่า Google Doc Spreadsheet  คือ Excel ที่สามารถใช้งานได้บน web browser ดังนั้น เราสามารถที่ใช้งาน Spreadsheet จากเครื่องคอมพิวเตอร์เครื่องใดก็ได้ ขอเพียงเครื่องคอมพิวเตอร์เหล่านั้นเชื่อมต่ออินเตอร์เน็ตอยู่

จุดที่น่าสนใจของ Spreadsheet คือ

ในวันนี้ ผมจึงขอโอกาสแนะนำวิธีการเขียน script เพิ่มเข้าไปใน Spreadsheet ภาษาที่ใช้คือ JavaScript ซึ่งเป็นภาษายอดนิยมของ web developer และโดยส่วนตัวผมเองก็ชื่นชอบรูปแบบภาษาในกลุ่ม C เช่น C, C#, JavaScript มากว่า Begin End block เช่น Visual Basic (VB) จึงค่อนข้างถูกใจ Script ใน Spreadsheet มากว่า Macro VBA

เราจะเขียน script ให้ทำการแสดงวันเริ่มต้นสิ้นสุดของช่วงเวลาในหนึ่งสัปดาห์ แสดงออกมาเป็นรายการในหนึ่งปี
ดังภาพตัวอย่างดังนี้

ขั้นตอนการเขียน script เป็นดังนี้ครับ
1. ไปที่ docs.google.com (ต้อง login ด้วย gmail account)

2. สร้าง Spreadsheet ใหม่ โดยคลิกปุ่ม Create เลือก Spreadsheet (กรณีเมนูภาษาอังกฤษ)

3. จะแสดงหน้าต่าง Spreadsheet ใหม่ที่เพิ่งสร้างขึ้นมาโดยอัตโนมัติ เลือก File > Rename ตั้งชื่อให้กับ Spreadsheet ว่า date range in week list ดังภาพ

4. หลังจากนั้นให้ไปที่ Tool > Script Editor เพื่อเขียนคำสั่งกัน

5. เริ่มต้นเขียนคำสั่งเข้าไปในหน้าต่าง Script Editor ในหน้าต่าง Script Editor ไปที่ File > Rename พิมพ์ renderDateRange แล้วกดปุ่ม OK ดังภาพ

6.  มุมด้านขวาจะเป็นรายการของไฟล์ที่สามารถเปิดขึ้นมาเพื่อเขียนคำสั่งได้ในตัวอย่างนี้คือ code บริเวณที่ได้ล้อมกรอบสีแดงเป็นบริเวณที่พิมพ์คิดสั่งเข้าไปได้ ลบคำสั่งเดิมที่มีอยู่ให้หมด

พิมพ์คำสั่งเพื่อสร้างรายการของช่วงเวลาในหนึ่งสัปดาห์ ตั้งแต่วันอาทิตย์แรกของปีไปจนถึงสัปดาห์สุดท้ายของปี
ดังนี้
 

//config value
var startDate = new Date("Jan 1, 2012");
var weekRange = 7;//number of day in week
var rowHeight = 25;//set row height

var firstDateRangeRow = 2;//set first row to set date range

//render date range when open sheet
function renderDateRange() {

 //end date in range
  var endDate = new Date(startDate);
  endDate.setDate(startDate.getDate()+ weekRange -1);
   
  //get first sheet
  var  sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
      
  //set first date range row
  sheet.setRowHeight(firstDateRangeRow,rowHeight);
  
  //set cell value with date format
  sheet.getRange(firstDateRangeRow, 1).setValue(
      Utilities.formatDate(startDate,"GMT+7","MMM d")
                                    + " - " + 
      Utilities.formatDate(endDate,"GMT+7","MMM d")
    );
      
  //set other row
  var row = firstDateRangeRow + 1;
  while(endDate.getFullYear() == startDate.getFullYear())
  {
    //add day to next be next date in range
    startDate.setDate(startDate.getDate()+ weekRange);
    endDate.setDate(endDate.getDate()+ weekRange);
    
    //set row hight
    sheet.setRowHeight(row,rowHeight);
    
    //set cell value with date format
    sheet.getRange(row, 1).setValue(
      Utilities.formatDate(startDate,"GMT+7","MMM d")
                                    + " - " + 
      Utilities.formatDate(endDate,"GMT+7","MMM d")
    );
    
    //increment current row number
    row ++;
  }
  
}

เพื่อความเข้าใจในคำสั่งและการประยุกต์คำสั่งเพื่อใช้งานอื่น ผู้อ่านสามารถศึกษา API ของ Google App Script Spreadsheet Servicesได้จากที่นี่ http://code.google.com/googleapps/appsscript/service_spreadsheet.html

ทดลองกดปุ่ม Run ดูผลลัพธ์ที่ Spreadsheet ตารางจะแสดงรายการช่วงวันในหนึ่งสัปดาห์ภายในหนึ่งปี

7. จากนั้นทำการผูก function renderDateRange เข้ากับ event ไปที่ Trigger > Current's script trigger... Popup Current project's triggers คลิก link No triggers set up. Click here to add one now

 

กำหนดหนดค่าดังรูปภาพ แล้วกดปุ่ม Save เป็นการทำให้ function นี้ถูกเรียกใช้งานเมื่อ Spreadsheet ถูกเปิดขึ้นมา

กดปุ่ม Ctrl + S เพื่อ Save งานอีกครั้ง เพียงเท่านี้เราก็มีตารางที่แสดงรายการของเวลาในหนึ่งสัปดาห์เป็นเวลาหนึ่งปี ไว้ใช้งาน สามารถนำไปใช้สร้างตารางเวรงาน หรือประยุกต์ใช้ด้านอื่นก็ได้

ผมได้ publish Spreadsheet ตัวนี้ เข้าไป copy ทดลองใช้งานและเปิดดูคำสั่งได้ตาม link ต่อไปนี้

copy Google Spreadsheet

ความเห็น

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Friends
jirawat.in.th clipdonjai.com janawat.wordpress.com csharp89.blogspot.com 108blog.net

HTML5 Powered with Multimedia