前言
本文將介紹 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 事件)。回傳結果如下圖。