# [筆記] 使用 pygsheets 記錄實驗數據到 google sheet ## 設定 Google Drive API 1. 去 google cloud console 上建一個專案 https://console.cloud.google.com/ 2. 接著在專案裡面搜尋 Google Drive API ![](https://i.imgur.com/3iSmb2E.png =x250) 3. 接著啟用它 ![](https://i.imgur.com/Rcmi9JM.png =x200) 4. 去憑證 (Credentials) 點選"+建立憑證" 然後,選擇 "服務帳戶" ![](https://i.imgur.com/pF6KZqw.png =500x) 5. 設定完服務帳戶 ID 後可以在下方看到一組服務帳戶ID為首的email帳號 - 去 google sheet 表單中,將該帳號加入共用名單當中 ![](https://i.imgur.com/uxTvW9l.png =230x) 6. 接著去服務帳戶的頁面裡面點選"金鑰>新增金鑰>選 json 格式"就會下載一個金鑰 json 檔案 ![](https://i.imgur.com/4ZpDY3M.png =500x) 7. 記得還要啟用 google sheet api ![](https://i.imgur.com/JA16PfB.png =500x) ## 安裝與使套件 pysheets 安裝 pysheets https://github.com/nithinmurali/pygsheets ``` pip install pysheets ``` 使用 pysheets 把資料寫入 google sheet ```python import pygsheets import pandas as pd #authorization gc = pygsheets.authorize(service_file='{這裡放金鑰json的檔案路徑}') # Create empty dataframe df = pd.DataFrame() # Create a column df['name'] = ['tao1', 'tao2', 'tao3', "tao4"] df['age'] = [11, 12, 13, 14] #open the google spreadsheet sh = gc.open('{這裡寫你的google sheet的名稱}') #select the first worksheet wks = sh[0] #update the first worksheet with df, starting at cell A1 i.e.(0,0) wks.set_dataframe(df,(0,0)) ``` ## 表單的基本操作 細節可以查 document https://pygsheets.readthedocs.io/en/stable/worksheet.html 我紀錄一下我常用的 ### update sheet 標單中 A1 那一格的值成 XDD ```python wks.update_value('A1', 'XDD') ``` ### update 整個 row ```python wks.update_row(4, ['tao3', 18]) ``` ![](https://i.imgur.com/FaApasB.png =230x) ### 取得表單範圍內的值,例如從 'A1' ~ 'B4' ```python start = 'A1' end = 'B4' res = wks.get_values(start, end) print(type(res)) res ``` 可以看到 output 長這樣 ``` <class 'list'> [['XDD', 'age'], ['tao1', '11'], ['tao2', '12'], ['tao3', '18']] ``` ## 在表單裡面新增一個新的 TAB (worksheet) 再複習一次基本的設定與連線到表單 (sheet) ```python import pygsheets import pandas as pd #authorization gc = pygsheets.authorize(service_file='{這裡放金鑰json的檔案路徑}') #open the google spreadsheet sh = gc.open('{這裡寫你的google sheet的名稱}') ``` ### 建立新的 TAB 例如建立一個 200 row 的表單,Tab 名稱為 nba_2023 ```python N = 200 sheet_name = "nba_2023" sh.add_worksheet(sheet_name, rows=N) ``` ### 把新的資料 (dataframe) 存進去 使用 property="title" 以及 value="nba" 去找到剛剛建立的 sheet ```python datas = [["Irving", "Dallas Maverick", "PG"], ["Westbrook", "La Clippers", "PG"], ["Durant", "Phoenix Suns", "SF"], ["Curry", "Golden State Warriors", "PG"], ["Harden", "Philadelphia 76ers", "SG"], ["Jokić", "Denver Nuggets", "C"]] df_new = pd.DataFrame(columns=['name', 'team', 'position'], data=datas) ws = sh.worksheet(property="title", value="nba_2023") ws.set_dataframe(df_new, (0,0)) ``` 目前結果 ![](https://i.imgur.com/WMEgmh9.png =x300) ### 追加新的資料 rows append 到表單的後面 ```python values = [["Dončić", "Dallas Maverick", "SG"], ["Davis", "LA Lakers", "PF"], ["Tatum", "Boston Celtics", "SF"]] ws = sh.worksheet(property="title", value="nba_2023") ws.append_table(values=values) ``` 結果 ![](https://i.imgur.com/iB95y60.png =x300) 再執行一次就會看到這樣 ![](https://i.imgur.com/SlNartQ.png =x320) 補充說明: 剛剛我們建立表單時設定 rows=200 當我執行完 append_table 兩次後,共新增了 6 筆資料, 此時表單的大小也會跟著長大,變成 200 + 6 = 206 ![](https://i.imgur.com/LrjihJF.png =x230) 報告完畢!