Posted at

PythonからGoogle Sheetsを更新する方法

More than 3 years have passed since last update.

OAuthを使ってGoogle Sheetsを編集する方法のメモ。


事前準備


Credentialsの作成



  • https://console.developers.google.com/project/ でプロジェクト作成

  • [APIs & auth] > [Credentials] を選択してOAuthの [Create new ClientID] をクリック

  • [Service account] を選択して [Create ClientID] をクリック

  • JSONファイルが自動的にダウンロードされるけど [Generate new P12 key] をクリックしてキーの作成

ここで必要なのは

- コンソール上に表示されているEmail address (xxxxxx@developer.gserviceaccount.comなど)

- 上でダウンロードしたP12 keyファイル


Pythonのモジュールのインストール

以下をpipインストール


  • gspread

  • oauth2client

※ oauth2cientをインストールする際にはpyopensslが必要


コード

import gspread

from oauth2client.client import SignedJwtAssertionCredentials

# 認証
f = file('/path/to/p12keyfile', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
'xxxxxx@developer.gserviceaccount.com', # Email address
key,
scope='https://spreadsheets.google.com/feeds https://docs.google.com/feeds',
token_uri='https://accounts.google.com/o/oauth2/token'
)
gs = gspread.authorize(credentials)

doc = gs.open('Worksheet名')

# Sheet追加
sheet = doc.add_worksheet('Sheet名', row=100, col=20)

# Sheetの選択
sheet = doc.worksheet("Sheet名")

# 値の取得

val = sheet.acell('B1').value # ラベル指定の場合のメソッド名はacell
val = sheet.cell(1,2).value # 座標指定の場合は (行,列)

# 値の設定・変更

sheet.update_acell('B1', 'hoge') # ラベル指定の場合のメソッド名はupdate_acell
sheet.update_cell(1, 2, 'hoge') # 座標指定の場合は (行,列)

# 変更量が多い時
cell_list = sheet.range('A1:C4')
'''
cell_list[0] : A1
cell_list[1] : B1
cell_list[2] : C1
cell_list[3] : A2
cell_list[4] : B2
:
'''

for cell in cell_list:
cell.value = 'fuga'
sheet.update_cells(cell_list)


OAuthを使わない方法

パスワード書くのを躊躇わない方は。


import gspread
doc = spread.login('xxxx@gmail.com', 'password')

sheet = doc.add_worksheet('Sheet名', row=100, col=10)