PythonでGoogleスプレッドシートを編集する方法について入門者向けにまとめました。
サービスアカウントキー(JSONファイル)の発行
Pythonでは、「gspread」「oauth2client」モジュールを使うとGoogleスプレッドシートにアクセスして編集できるようになります。そのために、最初にGoogleスプレッドシートにアクセスするためのサービスアカウントキー(JSONファイル)を発行する必要があります。本節ではその手順を紹介します。
①プロジェクトの作成
● 「https://console.developers.google.com/cloud-resource-manager」へブラウザでアクセスし、[プロジェクトを作成]をクリック。

● [プロジェクト名]に任意の名前を入力して[作成]をクリック。

※利用規約画面が表示されたら利用規約にチェックを入れて[同意して実行]をクリック→
● 作成完了まで少し時間がかかるので待ちます。


②Google Drive APIの有効化
● ライブラリからAPIを検索(上の検索欄に「drive」と入力)し、検索結果から「Google Drive API」を選択して有効にします。


③Google Sheets APIの有効化
● 「sheet」と入力すると「Google Sheets API」が表示されるので選択し有効にします。


④サービスアカウント キーの発行
● 「認証情報」→「認証情報を作成」→「サービスアカウント キー」を選択します。

● 任意のサービスアカウント名を入力して、役割は「編集者」を選択し「完了」をクリックします。

● 作成したサービス名ををクリック。。

● 「キー」をクリック。

● 「鍵を追加」→「新しい鍵を作成」をクリック。

● タイプを「JSON」にして「作成」をクリックするとJSONファイルがダウンロードされます。


Googleスプレッドシートの設定
続いて、Googleスプレッドシートを作成し、サービスアカウントキー(JSONファイル)で外部から編集可能な状態にする必要があります。本節ではその手順を紹介します。
● 以下リンクから編集対象となるスプレッドシートを作成し、任意のシート名を入力します。
https://docs.google.com/spreadsheets/create
● シート右上の共有ボタンを押します。

● 共有するユーザーのメールアドレスの入力欄が表示されます。
先程ダウンロードしたJSONファイルを開いて「client_email」行のメールアドレス(xxxxx@gspread-sample-202808.iam.gserviceaccount.com)をコピーして貼り付けて「送信」をクリック。
"client_email": "xxxxx@gspread-sample-202808.iam.gserviceaccount.com",

● 以下のような画面が出るのでポップアップの「OK」をクリック。

● 追加したアドレスが「編集者」になっていることを確認。

Pythonの動作確認(Googleスプレッドシートのセルにアクセス)
● pipで「gspread」と「oauth2client」をインストールします。
$ pip install gspread $ pip install oauth2client
● 以下のPythonプログラムを作成し、実行すればGoogleスプレッドシートを編集できます。
※自分で編集する箇所①②は適宜修正してください。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
# 自分で編集する箇所①先程ダウンロードした「サービスアカウントキーのJSONファイルのパス」を入力
credentials = ServiceAccountCredentials.from_json_keyfile_name('サービスアカウントキーのJSONファイルのパス, scope)
gc = gspread.authorize(credentials)
# 自分で編集する編集箇所②'プロジェクト名'にはGoogleスプレッドシート名(実行例なら左上の「停電アラート」)を入力
wks = gc.open('プロジェクト名').sheet1
# A1セルのデータを更新(Testと記入)
wks.update_acell('A1', 'Test')
# A1セルのデータを取得して表示
print(wks.acell('A1'))
● 実行結果は以下のとおり



コメント