App Inventor TW 教學 Spreadsheet 元件 – 設定 Google Sheets API 與讀寫試算表

Spreadsheet 元件 – 設定 Google Sheets API 與讀寫試算表

前言

本文將介紹 MIT App Inventor 最新推出的 Spreadsheet 元件,並與您所建立的試算表來互動,非常方便喔。請先根據 [Sheet 元件 – 建立 Google Sheet API] 教學來完成 Google Sheet API key 申請。

本文

一如往常,將分為 Designer 與 Blocks 來介紹,您必須先大概決定 app 要有哪些元件,再決定元件彼此之間的互動關係。請由本連結下載 .aia 檔,請輸入正確的資訊即可與您的試算表互動

Google 試算表

非常熱門的 Google 服務,大家應該很常使用吧。請由此進入 Google 試算表主頁並建立一個試算表。根據原廠文件的資料如下:

  • 每日建立試算表數量 / 每日讀寫的次數:沒有限制
  • 每個專案的每分鐘可讀寫次數:上限300次
  • 每個專案的每分鐘每個使用者可讀寫次數:上限60次

記下您的表單ID,就是網址裡面最長的那一段英文與數字的組合,例如以下的 OOXXOOXX

https://docs.google.com/spreadsheets/d/OOXXOOXX/edit#gid=0

最後將這個試算表共用給Google Sheet API 中的服務帳戶 (service accout)。

Designer

根據常用的功能來說明,共有四個按鈕對應到讀取、新增、更新、刪除,也就是常見的資料庫操作。另外還有一個標籤來顯示個動作執行結果。以及一個 Spreadsheet 元件,就是本文主角啦!

Spreadsheet 元件須完成以下設定:

  • ApplicationName:這個欄位”好像”是自動帶入  Screen1 的 appName 欄位,不需要修改。
  • CredentialsJson:上傳建立 Google Sheet API key 時所產生的 .json 檔,
  • SpreadsheetID:最重要就是這裡啦,請填入您所要操作試算表的 ID,如上所述。

Blocks

接著在 Blocks 頁面依序完成所有功能:

讀取 / 錯誤處理

按下 Button_read 時,執行 Spreadsheet1.ReadSheet 指令來讀取整張表單,並由 Spreadsheet1.ReadSheet 事件來取得讀取結果。

請注意 Sheet1 為您所要操作的試算表下的表單名稱,如果您的 Google 語系使用正體中文,會變成 “工作表1” 而非 “Sheet1” 導致出現以下的執行錯誤。別擔心,改回來就好了,改 app 端或改表單名稱都沒問題喔。

所有 Spreadsheet 的錯誤都會由 Spreadsheet1.ReadSheet 事件來處理,並從其中的 errorMessage 看看發生什麼事情了。

新增一列資料

按下 Button_add 時,執行 Spreadsheet1.AddRow 指令來新增一列資料,就是按照流水號向下新增到表單中。並由 Spreadsheet1.FinishedAddRow 事件來取得執行結果。

更新

按下 Button_WriteRow 時,執行 Spreadsheet1.WriteRow 指令來更新指定列號 (rowNumber) 的資料,並由 Spreadsheet1.FinishedWriteRow 事件來取得執行結果。

清除指定範圍

按下 Button_delete 時,執行 Spreadsheet1.ClearRange 指令來清空指定 sheet 中的指定範圍內容,並由 Spreadsheet1.FinishedClearRange 事件來取得執行結果。至於如何正確取得某一個 cell 或範圍的正確參照,請繼續看下去。

 

額外功能

還有一些好用的功能,也為您整理好囉!

取得 cell 參照

Spreadsheet1.GetCellReference 指令可以取得 row x col 所指定 cell 之 Google 試算表編號 ,例如以下指令執行結果為 B2,由下圖左上角也可看到。

取得範圍參照

Spreadsheet1.GetRangeReference 指令可以取得 row1 x col1 x row2 x col2 所指定區域的 Google 試算表編號 ,例如以下指令執行結果為 B2:C4,由下圖左上角也可看到。

精準過濾

Spreadsheet1.ReadWithExactFilter 指令可以取得 colID 這欄針對 value 的精準過濾結果 (藉由 GotFilterResult 事件)。由下圖可知,由於沒有完全符合,所以回傳結果為空的清單。

部分過濾

Spreadsheet1.ReadWithPartialFilter 指令可以取得 colID 這欄針對 value 的部分過濾結果 (藉由 GotFilterResult 事件)。由下圖可知,回傳結果為一個清單,代表第一列 -> [1] [[“ERIC”, “ERIC@cavedu.com”, “acdefg”]]。

讀取單一格

Spreadsheet1.ReadCell 指令可以取得指定工作表下指定 cell 的數值 (藉由 GotCellData 事件)。由下圖可知,回傳結果會是 hi@hello.org。

讀取範圍

Spreadsheet1.ReadRange 指令可以取得指定工作表下指定範圍的數值 (藉由 GotRangeData 事件)。回傳結果如下圖。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *