2020年4月7日 星期二

Google Apps Script (GAS) 學習筆記 (一) : Google Apps 簡介

上週買了碁峰新出版的 "Google Apps Script 雲端自動化與動態網頁系統實戰" 這本書後看完前三章, 覺得 GAS 這麼好用我竟然都忽視它. 網友也留言說 GAS 很好玩, 所以我決定暫時撇下 Python 與 AWS 的學研進程, 撥出一些時間來研究研究.

我在 2014 年時就已經注意到 GAS 了, 大概在 Google 雲端硬碟推出後, 我發現裡面的 GAS 可說是 Google 版的 VBA (Visual Basic for Applications), 特別是在 Google 試算表中, 除了實作了與 Excel 一模一樣的函數外, 還可以用 GAS 撰寫類似 VBA 巨集的功能來達到操作自動化.

不過, GAS 不只是函數與巨集而已, 它提供了程式編輯器與除錯器等線上應用程式開發工具, 可說是全部 Google Apps 操作自動化的瑞士刀, 其功能比之 VBA 有過之而無不及. 最重要的是, GAS 採用了前端網頁程式設計師最熟悉的 Javascript 語法, 只要學習如何用 Javascript 語法操作 Google Apps 的類別即可.

以下是這幾天學習所整理的筆記 :


一. Google Apps (雲端應用程式) :

Google 是雲端服務的先驅, 推出了許多 SaaS (Software As A Service, 軟體即服務) 應用軟體 (Google Apps), 例如 :
  • Google Search (搜尋引擎) 
  • Google Gmail (谷歌信箱)
  • Google Calendar (谷歌日曆)
  • Google Contacts (谷歌聯絡人)
  • Google Translation (谷歌翻譯)
  • Google Map (谷歌地圖)  
這些都是架在 Google 雲端基礎設施上, 以網路為基礎 (web-based) 的線上 (on-line) 應用程式, 只要透過瀏覽器即可在電腦, 平板, 或是手機等平台上使用, Google 用戶完全不需要擔心軟體版本與平台問題, 在目前 4G 與光纖普及的高速網速下, 效能不輸傳統桌上型應用程式, 便利性則遠勝之.

除了上面這些元老級雲端應用軟體外, Google 於 2012 年推出 Google Drive (雲端硬碟) 檔案應用服務, 將許多 Google Apps 都整合在雲端硬碟裡, 每個 Google 帳戶擁有 15GB 的雲端硬碟容量來儲存 Google Apps 產生的檔案, 使用者可建立與編輯如下最常用的 Apps 文件, 並可與其他 Google 用戶分享以便協同工作 (collabortion) :
  • Google Docs (文件, 功能相當於 Word)
  • Google Slides (簡報, 功能相當於 PowerPoint)
  • Google Sheets (試算表, 功能相當於 Excel)
  • Google Forms (表單)
前三個是與微軟 Office 套件軟體中的 Word, PowerPoint, 以及 Excel 功能極為類似三個辦公室軟體, 只不過這些 Google Apps 都是跨平台版本無關之 Web 版雲端應用軟體 (cloud-based apps), 而 Office 軟體基本上必須在使用設備上進行安裝才能使用, 且有版本相容性問題, 例如新版 Office 的 .docx 與 pptx 等格式檔案無法在舊版的 Office 2003 中開啟.

Google Apps 所建立的檔案都以 Google 原生檔案格式儲存在雲端硬碟中, 並具有各自的副檔名, 例如 Google 文件是 .gdoc; 試算表副檔名是 .gsheet 等等. 這些 Google Apps 原生檔案可利用 GAS 彼此互動與自動化操作, 例如連結 Gmail 與 Google Calendar (谷歌日曆), 依據日曆上的行程寄送生日卡或提醒訊息;  甚至可連結第三方軟體例如 Line, 向特定群組或 Line 好友發送即時訊息. 除了在雲端硬碟中建立原生檔案, 也可以上傳任何類型的檔案到雲端硬碟中儲存.

在 Google 雲端硬碟頁面中按下左上角的 "+新增" 鈕, 在主選單中按 "+資料夾" 鈕可在目前的雲端資料夾下建立子目錄; 按 "檔案上傳" 可點選多個檔案一次上傳到目前的雲端資料夾;  按 "資料夾上傳" 則可點選一個本機資料夾上傳; 按 "Google 文件", "Google 試算表" 與 "Google 簡報" 鈕可建立原生檔案 :




選擇 "更多" 會跳出子選單, Google Form 與 Google Apps Script 等應用服務 :




在雲端硬碟中所建立的 Google Apps 原生檔案有其特定的檔案格式與副檔名 (不會顯示), 例如 Google 文件是 .gdoc; 試算表是 .gsheet; GAS 則是 .gs 等等, 不過這只是類似 link 的捷徑, 並非真正的副檔名.


二. Google Apps Script (雲端應用程式語言) : 

GAS 是 Google Apps 操作自動化所使用的程式語言, 它基本上是由兩個部分組成 :
  • Javascript 語法 (主要是 1.6, 也包含部分的 1.7 與 1.8 與 ECMAScript 5)
  • Google-defined classes (用於操控各個 Google Apps 的類別)
因為 GAS 以 Javascript 1.6 版為主體, 因此更新版的 Javascript 語法無法使用於 GAS 中. 如同 Microsoft Excel 或 Word 中的 VBA 程式, GAS 提供了一個簡單的方法讓 Google 應用服務與第三方服務之間的自動化作業變得可能, 與 VBA 運作於傳統桌面應用程式不同的是, GAS 程式碼是在 Google 雲端伺服器中執行 (Javascript 無須編譯), 運算結果則傳送到本地端瀏覽器中顯示, 參考 :

https://en.wikipedia.org/wiki/Google_Apps_Script

雖然 GAS 與前端網頁的 Javascript 用法不完全相同, 但在基本語法上是一樣的, 參考 :

網頁技術速學筆記 (三) : Javascript 基礎

GAS 比起 VBA 具有如下優點 :
  • 跨平台 (cross platform) :
    GAS 應用程式於 Google 雲端伺服器中運行, 不論本地平台作業系統是 Windows, Linux, Mac OS, iOS, 還是 Android, 只要有瀏覽器均可使用; 而 VBA 程式則不行. 
  • 版本獨立 (version independent) :
    Google 應用程式 Docs 與 Sheets 等會自動存檔於 Google 雲端, 可從任何設備以瀏覽器存取編輯, 完全不需要擔心類似 Office 軟體版本問題.
不過 GAS 程式也有其限制, 因為是使用 Google 雲端伺服器執行, 運算資源是所有免費用戶共享的, 為避免資源被濫用, 因此每個用戶能夠使用的資源是有限制與配額的 :
  • 每一個 GAS 程式不可連續運算超過 6 分鐘. 
  • 每一個 GAS 程式每秒最多只能呼叫執行 30 次. 
  • 每天只能傳送電子郵件給最多 100 個不同收件者. 
  • GAS 程式的運算都是阻塞式運算, 不提供事件驅動與非同步模式. 
其中 6 分鐘執行時間限制可以利用觸發條件執行來克服. 雖然這些限制可能使得 GAS 程式執行效能略遜於 VBA, 但 GAS 具有的可存取性 (accessibility) 與跨平台優點卻是 VBA 應用程式所不及.

新增雲端硬碟檔案時點選 "Google Apps Script" 會開啟一個獨立的 GAS 程式專案, 預設檔名為 "程式碼.gs" (可更改), 程式中有一個預設函數 myFunc() :




GAS 程式基本上就是在這些使用者定義函數中操作 Google Apps 物件 (類別) 而已.


三. Google Sheets (試算表) : 

在 Google Apps 應用中, 試算表的角色特別重要, 因為它通常被拿來作為簡便的雲端資料庫使用, 對於中小型應用來說 Google 試算表作為資料庫的代用品是綽綽有餘的, 而且它內建了幾乎與 Excel 完全一樣名稱的函數, 可以直接在試算表儲存格中用 "=" 來呼叫內建函數, 也可以自行撰寫客製化函數來呼叫, 以存放於儲存格中的的數據來進行運算.

我在 2014 年第一次邂逅 GAS 時曾簡單地用它 Google 試算表來幫姐姐估算國中會考的落點, 不過當時只是單純呼叫內建函數而已, 參考 :

Google Apps Script 測試

建立新的試算表後即可在儲存格中輸入資料與進行計算, 使用方式與 Microsoft 的 Excel 完全一樣 (內建函數也是一樣), 例如 :




試算表儲存格操作可參考 Excel :

Excel 函數學習筆記 (一) : 試算表基本操作

Google 雲端硬碟中所儲存的檔案也可以個別下載到本機中儲存, 也可以在桌上型電腦下載安裝 Google Drive "備份與同步處理" 軟體, 它會在本機中建立與 Google 雲端硬碟雷同的檔案目錄結構, 並自動維持兩端同步 :

https://www.google.com/drive/download/

不過在下載 Google 文件/試算表/簡報時, 會自動轉換成 Microsoft 之 .docx, .xslx, 以及 pptx 檔案格式, 而不是 Google Apps 原生檔案.

參考 :

看見數據分類 google 試算表
即時監控控必備 Google 試算表 add-on x
Google Apps Script 漏洞,恐讓駭客經由軟體服務 (SaaS) 平台散布惡意程式

11 則留言:

  1. 很高興又多了一位 GAS 同好。
    我用 Google 表單讓外籍看護輸入家慈的血壓、血糖...等數據,即時由 GAS 通知 LINE 家庭群組,數據異常時還會出現貼圖與圖表。
    用 LINE bot 搭配 GAS 做一個 LINE 訊息備份,工作夥伴們在 LINE 群組內留下的文字、圖片、貼圖等訊息可以在試算表與雲端硬碟內永久保存,弭補 LINE 過期無法讀取照片、檔案的缺點。
    用 Google 表單做一份詢價單,客戶填了詢價單後會通知業務員,再經簡單的操作就把資料帶入報價資料,套表輸出PDF完成報價單。
    商品出售時輸入客戶資料並設定下個月自動發送問券,且可事先預填出貨日期、型號、數量等部分資料,發送後過幾天再通知有哪些客戶未填回,可再重新發送...。

    回覆刪除
  2. 前輩, 我是初學, 請不吝指教與指正喔! 唯有交流方能進步!

    回覆刪除
  3. 不敢不敢,您長期的分享讓我獲益匪淺,衷心銘謝。

    回覆刪除
  4. 謝謝留言, 我也只學了一點就忙別的了, 有空再回來繼續學.

    回覆刪除
  5. 推推 狐狸夥伴//
    也是在書店看到<>
    而入門的//,之前雖然知道GAS的存在 但大部分google都是原文文件 啃不太下去XD

    看了一個禮拜的感想是 內容很多,但有些code的部分 沒有很說明編寫出來的原因
    跟可能是後續出版後才多了一些用法//
    書中sendmail那邊一直搞不懂用法卡關XD,最後是網路上找到gmail.app 才比較了解編者的概念。

    回覆刪除
  6. 我也是好想抽出時間繼續學習 GAS 啊!

    回覆刪除
  7. 感謝寶貴分享,我也想花時間學習GAS,及相關生活應用整合到如LINE平台的運用。
    希望能經由你的分享,我也能有更好的收獲,並進一步分享自己的學習成果。

    回覆刪除
  8. 收到! 我會抽點時間推一下進度, 互相切磋唄!

    回覆刪除