Monday, September 30

[TECH] Google Spreadsheet Script 入門

Scope and Objectives
基本上我是超新手,而且很業餘,以下的筆記是給入門甚至外行人看的,也只是給自己一些筆記。

gScript 用的是 java。有部分 method 可以直接引用 javascript 的 function。
gSpreadsheet function 可參考此連結
google script 用 var 來定義 string,直接以 var="string"; 來定義即可。
return itself can halt the function without an exit() commend

目前練習過的用法
餘下收。

Trigger and Events
  • 定時開啟/關閉 Google 表單回應功能

    • 須使用以下的 code 來開啟表單:
    • /* 定義 form class */
      var form = FormApp.openById('1mt5mEjOnEAS2nuNebvYzj-BG9NOhmuRE9Cp6P_xudQI');
      /* 定義 TurnOnForm method */
      function TurnOnForm(){
       form.setAcceptingResponses(true);
      }
    • 然後用以下 code 做 time-driven trigger(可參考 google document 此頁面以及所有 method):
    • /* 定日期,因為 newTrigger 這個 class 裡的 Method 只能定日期和單一時間(而且只能是整數小時),所以得先定義日期。另外時區有點麻煩,也是需要另外先 define,不然 compiler 不給過。*/
      var date = new Date(2013, 9, 29);
      var tz = "America/New_York";
      /* 定義 Method。Google script 很貼心,會自動列出 newTrigger object 內所包含的所有 fields,直接選取就好。時間 trigger 只能選一種,也就是說如果選了 everyHours,其他選項都不能用。最後是 create 這個 behavior。 */
      function Timer(){
        var openforRes = ScriptApp.newTrigger(TurnOnForm)
        .timeBased()
        .everyHours(21)
        .inTimezone(tz)
        .create()
      }
    • 不過很奇妙的是,本來不打算用 programatically time-driven,但因為從 resource 那邊找不到 trigger time-driven 這個下拉選項,才自己寫了這段。插入以後反而可以用了!原來是因為之前沒有授權此 app 自動在文件擁有者不在場時運行!所以 debug 時會出現如下的畫面:
    • 授權 app 自動執行和存取 Google Drive 內文件。
    • 這兩個授權通過就可以使用 time-driven trigger。
    • 這篇 doc 說明 gs 支援 upgrade authorization experience。不過我不確定是不是需要付費才能 upgrade,至少我用免費帳戶時,File 選單下面此選項是 inactivated 的。

資料表函式
這個表單是當初為了 Seler Century 的對戰系統而創的。玩家輸入 plurk bzzz 各色數量就可以計算雙方攻防後結果。

No comments :

Post a Comment