2019年2月9日 星期六

【Python】寫入讀出資料到Google sheet 試算表


今天來介紹如何使用Python寫入Google Sheet的方法


整個流程很單純,只是新手比較常碰到GOOGLE設定上的問題

一、先到 Google Developers Console 建立一個 Project


  • 先於左上方新增專案

  • 為專案命名
  • 啟用完成





二、啟用專案的 Sheet API

  • 點選【啟用API和服務】


  • 搜尋Sheet API並點選啟用



三、為API建立憑證

  • 於上方有提示訊息,直接點選建立憑證

  • 點選後會看到下述畫面


共有4個選項

Q.您目前使用哪個 API?

選擇 Google Sheet API

※假設今天使用其他的API就選其他的(廢話)

Q.API 的呼叫來源為何?
選擇 其他非使用者介面

※因為我們使用Pyhon如今天採用其他的方式呼叫就選別的了

Q.您需要存取什麼資料?
選擇 應用程式資料

使用者資料比較像是登入註冊等等時來使用

Q.您準備搭配 App Engine 或 Compute Engine 使用此 API 嗎?

選擇 否

※如果有搭配到GAE可以選


選擇完成後就點選取得憑證
  • 會跳轉至下列畫面



我們就為服務帳戶命名

※這個服務帳戶就類似你專案的一個帳戶,可以用來管理你的API憑證你也可以設置他的權限等等..

金鑰類型選擇JSON格式

完成後點選下載

將下載的json檔案放入待會Python專案目錄下

  • 檔案打開會有類似資訊,先將client_email複製起來


  • 我們建立一個sheet並且與剛剛複製的client_email一起共用





繁瑣的設定完成 ! 剩下程式的部分 

三、Python透過憑證連線

自訂一個函式為auth_gss_client


import gspread
import time #待會會取時間
from oauth2client.service_account import ServiceAccountCredentials 


auth_json_path = 'auth.json' #由剛剛建立出的憑證,放置相同目錄以供引入
gss_scopes = ['https://spreadsheets.google.com/feeds'] #我們想要取用的範圍
gss_client = auth_gss_client(auth_json_path, gss_scopes) #呼叫我們的函式


def auth_gss_client(path, scopes):
    credentials = ServiceAccountCredentials.from_json_keyfile_name(path, scopes)
    return gspread.authorize(credentials)


#從剛剛建立的sheet,把網址中 https://docs.google.com/spreadsheets/d/〔key〕/edit 的 〔key〕的值代入 
spreadsheet_key_path = '〔key〕'

#我們透過open_by_key這個method來開啟sheet
sheet = gss_client.open_by_key(spreadsheet_key_path).sheet1
#單純取出時間稍後塞入sheet
today = time.strftime("%c")
#透過insert_row寫入值 第二行塞入時間,abc,123的值
sheet.insert_row([today,"abc", 123], 2)


以上完成 !!    有任何問題歡迎留言發問

有錯誤也請提醒  感謝



常見錯誤:

ImportError: cannot import name 'ServiceAccountCredentials'

一開始我不知道為何取用到1.5.2的版本導致他根本找不到ServiceAccountCredentials

解法如下:

●先確認目前OAuth版本

可透過下列程式碼顯示
import oauth2client
print (oauth2client.__version__)

●透過cmd再次更新版本 pip install --upgrade oauth2client





參考文章:

https://city.shaform.com/zh/2016/03/19/gspread/

Python大數據特訓班電子書

2 則留言:

  1. 你好請問如果發佈到heroku上,去出現 ModuleNotFoundError: No module named 'gspread'
    這應該要怎麼解決
    在其他地方自己執行卻可以正常使用

    回覆刪除
    回覆
    1. Hi
      這個問題應該是heroku上找不到這個套件
      我很久沒部屬到heroku上 我幫你搜了一下
      你有將你要使用的套件資訊放到requirements.txt這份文件裡嗎?

      你可以看看https://devcenter.heroku.com/articles/python-pip

      刪除