Google版 Excelとも言えるGoogle スプレッドシートですが、クラウドベースなだけあって、どこからでも編集できるというのがとても便利ですよね。
これをさらにPythonで編集、書き込みや読み込みを自動化できたらもっと便利ですよね?これはGoogle のAPIを利用すれば、簡単にできるんです!
【前半】Google設定&Python環境構築と【後半】スクリプト作成の二回に分けて、紹介したいと思います。
前半は主に環境構築についてまとめました。
今回は後半部分についてまとめました!
Google が紹介する方法を参考にしているので、興味がある方は原文もご覧ください!Python Quickstart | Sheets API | Google Developers
テスト用スプレッドシート準備
今回は、次のスプレッドシートを準備して、セルの値をPythonで読み込んでみます。
あとで使用するので、スプレッドシートIDを控えておきましょう。
IDはURLの /d/ と /edit の間の文字列です!例えば以下のスプレッドシートURLで言えば太字の部分です。 https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit#gid=0
モジュールインポートと定数設定
モジュールのインポート
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
InstalledAppFlow はAPIへのアクセストークン取得のために、build はスプレッドシートを使用するために必要です。
定数の設定
まずはスプレッドシートIDと作業するレンジを設定しておきます。
SAMPLE_SPREADSHEET_ID = 'XXXXXXXXXX' # 操作したいシートのID SAMPLE_RANGE_NAME = 'A1:C3' # 操作したいレンジ
次に、Google に対してどこまでの操作を許可してほしいのかを伝えるために、スコープというものを用意します。
今回は読み取りだけなので、Read only に対応するスコープを入力します。
# Read only SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'] # Read and write の場合は↓を指定する # SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
アクセストークン取得
pythonでアクセストークン要求
前回作成したjsonファイルをGoogleに渡してアクセストークンを要求します。
# APIへのアクセストークンを要求する flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) creds = flow.run_local_server(port=0)
Googleアカウントでの許可
上記のスクリプトを実行すると、ウェブブラウザが立ち上がるので、ログインしましょう(自動で立ち上がらない場合は、Python consoleに表示されているURLを開きます)。
ログインするとこうなります(ビックリ!!!)
「このアプリは確認されていません」は、Google の verification process に従って安全性を確認していないために表示されるそうです。
今回は、スクリプト作成も自分で行っていますし、モジュールもgoogleのものしか使用していないので、強行突破します!!(自己責任で実施してください!)
詳細を表示して、安全ではないページに移動します(心理的抵抗がありますが・・・)。
再度ログインすると、権限付与の画面が出るので許可します。
続いて似たような画面がでますが、許可しておきます。最後に次の文章が表示されれば認証完了です!
スプレッドシート読み込み
serviceという名前のオブジェクトを作って、スプレッドシートを操作します。
# Google スプレッドシートへアクセスする service = build('sheets', 'v4', credentials=creds)
スプレッドシートの値を読み込みするために、次のコマンドを実行してみましょう!
spreadsheets() の values() を get しているという感じですね!
# セルの値を読み取る result = service.spreadsheets().values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID, range=SAMPLE_RANGE_NAME).execute()
スプレッドシート読み込み結果
resultの中身は辞書型です。これはスプレッドシートを読み書きするうえでの基本形です。
{ "range": "'シート1'!A1:C2", "majorDimension": 'ROWS', "values": [ [['名前', '身長(cm)', '体重(kg)'], ['YutaKa太郎', '170', '70'], ['YutaKa次郎', '160', '80']] ] }
あとは好きな形で出力しましょう!例えば、valuesのリストだけ取り出して、一行ずつ出力するならこんなかんじ!
values = result['values'] for row in values: print(row[0],row[1])
出力結果:
お疲れ様でした!
まとめ
前編、後編をあわせてGoogle スプレッドシートを編集(読み込み)するための方法をまとめました。
後編の大きな流れとしては
- pythonからアクセストークン要求
- Googleアカウントで許可
- pythonでスプレッドシート操作用のオブジェクト作成
- スプレッドシート操作
という手順ですね。
今回のスクリプトでは実行するたびに、毎回、Googleアカウントで許可をしないといけないので、とてもめんどうです。
通常は、このプロセスを一定期間省略するために、リフレッシュトークンというものを利用します!
次回はこのあたりをまとめようと思います!