iT邦幫忙

2021 iThome 鐵人賽

DAY 2
2
Modern Web

整合 Google 服務的燃料——透過 Google Apps Script (GAS) 加速你的工作速度系列 第 2

D2- Google Apps Script (GAS) 的環境設定、專案結構(Trigger)與四種打包方式

  • 分享至 

  • xImage
  •  

那進入到第二天的,今天我們先來了解基本 Google Apps Script 的設定方式!

ㄧ、怎麼開始使用 Google Apps Script?

進入方式 1. 從網址進入整體專案總覽

進到 Google Apps Script 的官方網站後,直接點擊 start scripting

進入方式 2. 從 Google Workspace 的產品們直接進入

到任意的 Google Workspace ,透過工具 > 指令編輯器來進入有綁定的 GAS 專案。

這兩個方式的差異在於,在於前者本身並未綁定任何 Google 產品,而後者通常都是會有個綁定的表單、投影片或文件,所以有些功能使用上會有一點點差異。像是在還沒包裝成 Add-On 時,兩者在抓要讓 GAS 讀特定 Google Sheet 時,方式 2 可以透過 getactivespreadsheet() 抓出「有綁定使用的表單」,方式 1 則須透過完整指定 ID 來抓到檔案。

通常開發時,我習慣透過 方式2 ,可以省掉一些設定的時間。


二、一個 GAS 專案的結構

總共有五個部分,包括總覽(Overview)、編輯器(Editor)、觸發條件(Trigger)、執行項目(Execution)和專案設定(Setting),其中比較重要的 「觸發條件」 和 「執行項目」,我們之後開發時主要會看到這兩個。

結構 1 編輯器(Editor)

通常打開一個新專案並進入編輯器,會看到一個預設的 程式碼.gs,檔案類型 .gs 是 GAS 的檔案結構,在下一個段落會詳細說明。在這邊,為了方便待會的說明,我們直接在 程式碼.gs 中寫一段簡單的 Code。

以下這段是我透過進入方式2綁定一個功能表後,用 SpreadsheetApp 叫出能控制 Google Sheet 的 Object API,再透過 getActiveSpreadsheet() 跟它說給我現在有「綁定的表單」,也就是我影片中左邊那份,並用 toast 丟出一個小告示說「Hello World!」,我們透過按下「執行」來讓這段程式碼運行。

function hello() {
  SpreadsheetApp.getActiveSpreadsheet().toast("Hello World!");
}

結構 2 執行項目(Execution)

結構 1 我們展示了順利執行的話會長怎麼樣,但如果我們想知道,執行背後的 console,或執行失敗的原因呢?這個時候就可以透過我們的 執行項目 來看到。

執行項目中,會顯示出所有你所有按下「執行」的歷史。包括是...

  • 在哪一個版本的「部署」中被觸發:我們之後會提到,可以將 GAS 發布成 Web App
  • 被觸發的是什麼「函式」:這邊就會是 hello
  • 執行的觸發「類型」:是有人點了選單,還是在後台執行
  • 執行的「開始時間」
  • 執行的「持續時間」
  • 執行的「狀態」,有三種比較常見:「已完成」、「已逾時」、「失敗」

「持續時間」記得沒有額外付費的話,執行有個扣打不能超過六分鐘,可以參考第一篇文章。

點擊每個執行項目,都會顯示其過程中的 console,如果是錯誤會顯示錯誤原因。如果想要看到成功的執行過程,則可以透過 Logger.log() 來印出過程中的物件、變數等,在下面第四點會詳細說明。

結構 3 觸發條件(Trigger)

在 GAS 中,我們可以設定「何時要啟動這函式」,常見的有「每次有人開啟表單/檔案」時啟動,「每天早上8點刷一次」,「跟著特定行事曆,到 9/1 凌晨 12 點時」幫我開一下。

實際上怎麼設定呢?一樣,我們打開綁定好表單的 GAS,並先完成想排定時間的程式碼(像這邊是 hello),並選擇三種驅動方式。

  • 試算表:或是其他的 Google 產品
  • 時間驅動:你要在每小時、每分鐘、每日、每週還是每月觸發一次
  • 來自日曆:要選擇跟著哪個行事曆(Google Calendar)

要注意的是,如果是在後台直接執行、運用打包後的選單或按鈕,抑或是在 Google Sheet 中已「公式」的形式使用,其觸發的 GAS 程式會在執行項目中列出,但不會列在觸發條件當中。


三、GAS 可接受的檔案類型

基本上 GAS 上你可以用這幾個檔案:.html.css.js.gs,且要注意是很純的 css,像是 .scss.sass 以及其他如 .php.py 等目前是仍無法讀取。而其中比較特殊的檔案是 .gs 在寫 GAS 時有個特別的檔案類型,供 GAS 運行使用。

要注意的是,這邊指的是單純 GAS 接受的檔案類型。如果你是有一個已經完成的 GAS 服務,想要串接 API,則可以透過 Google Worksapce REST API 來完成,其支援大部分的後端語言,包括 Go、Java、NodeJS、Python、Ruby 與 PHP,也支援 Android 和 IOS 要串接手機的 Code 也沒問題。


四、開始寫扣

1. 線上開發 vs 本地開發

想要開發 GAS ,可以直接用最開始的敘述直接進入 Apps Script 的平台,以類似 Cloud IDE 的方式開發與測試。至於要本地開發的話,則通常會使用 clasp 這項工具(Github: clasp)。這系列文章定位給入門者,大部分人可能沒有熟悉的 IDE 與特定語言。也因為我們只開發簡單功能,這系列我們會以每個人都能使用的「線上開發」做為主要的講解方式。

2. 第一次使用:允許授權(Create Credentials

在任何 GAS 專案的最一開始,當你按下第一次「執行」時,有個比較麻煩的步驟要按下「允許授權」,且要按下接受「不安全」的按鍵才會讓你繼續使用。

3. 如何 Debug

在 GAS 中,我們主要有兩種 debug 的方式。第一種是透過 Logger.log,類似 JS 中的 console.log() ,另一種則是用期線上開發的雲端 debug 工具,會告訴你跑到這一行有哪些變數(跟線下的 IDE 很像)。


五、打包讓他人可以使用

打包 1. 製作成按鈕

功能完成後,接著則按 插入 > 插圖,然後對做出來的圖案(任意圖案)按下右鍵,有一個指派程式碼(Assign),再打上 function 的純名字(輸入 hello 而不是 hello())就可以完成設定了!

取消的話,一樣是對按鈕按右鍵,則可以將指派的程式碼刪除。

打包 2. 用成類似 Add-On 的有 UI 選單

在這邊,我們先坐兩個簡單的功能,分別是「顯示出 Hello」和「顯示出 Hi」。

function hello() {
  SpreadsheetApp.getActiveSpreadsheet().toast("Hello World!");
}

function hi() {
  SpreadsheetApp.getActiveSpreadsheet().toast("Hi!");
}

然後我們再用 onOpen() 這個後台的觸發條件,意思是每當開啟表單時,就執行這段程式碼。接著再透過 SpreadsheetApp.getUi() 呼叫 UI,並透過 createMenuaddSubMenuaddItem 做出另外一個選單畫面。 特別提一下 addItem 的做法是... addItem( 表單上顯示的項目名稱, 實際在 .gs 檔案中的程式名稱)

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('客製化工具列')
      .addSubMenu(ui.createMenu('打招呼')
          .addItem('Say Hi', 'hi')
          .addItem('Say Hello', 'hello'))
      .addToUi();
}

最後完成就會像這樣子!

打包 3. 用成 Web App

打包 4. 包裝成 Google Sheet 可以用的公式

這兩個打包之後用完整的兩篇來介紹給大家。

而實際使用上,會建議用 打包2,原因是用 打包1 的按鈕功能很陽春,按下去時並不會知道自己已經點到了,有時會誤觸很多下。

補充:怎麼調整 Google 系列產品的時間

在開發 GAS 時,你會發現「時區設定」很重要,因為會想知道是幾點出 bug 的,以及排程的觸發條件是不是跟著自己的時區。那要怎麼調整呢?基本上是「綁定的試算表」(或其他產品) > 檔案 > 試算表設定 > 時區 來做更改)


這是第二天,把開發初期要注意的是盡力寫上來,主要透過影片的方式,希望能幫助大家時間,希望有所幫助!也歡迎留言跟我說想看到什麼樣的題目喔!


上一篇
D1- 誰適合使用 Google Apps Script (GAS)呀?
下一篇
D3- 如何透過 Google Apps Script 的 Trigger 來建立一個自動開啟、調整與關閉的 Google 表單?
系列文
整合 Google 服務的燃料——透過 Google Apps Script (GAS) 加速你的工作速度30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
jillpon
iT邦新手 5 級 ‧ 2022-03-19 11:32:33

請問一下三種驅動方式的「來自日曆」,這個試了好幾次還是用不出來,可以請版大解說怎麼使用嗎?感謝

我要留言

立即登入留言