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 ต่อไปนี้