YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

PythonでGoogleスプレッドシートを編集する方法【後編:スクリプト作成】

f:id:YutaKa:20191016214958p:plain
Google版 Excelとも言えるGoogle スプレッドシートですが、クラウドベースなだけあって、どこからでも編集できるというのがとても便利ですよね。

これをさらにPythonで編集、書き込みや読み込みを自動化できたらもっと便利ですよね?これはGoogle のAPIを利用すれば、簡単にできるんです!

【前半】Google設定&Python環境構築【後半】スクリプト作成の二回に分けて、紹介したいと思います。

前半は主に環境構築についてまとめました。 

www.yutaka-note.com

今回は後半部分についてまとめました!

Google が紹介する方法を参考にしているので、興味がある方は原文もご覧ください!Python Quickstart | Sheets API | Google Developers

テスト用スプレッドシート準備

今回は、次のスプレッドシートを準備して、セルの値をPythonで読み込んでみます。

f:id:YutaKa:20191026074528p:plain

あとで使用するので、スプレッドシート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を開きます)。

f:id:YutaKa:20191026075658p:plain

ログインするとこうなります(ビックリ!!!)

f:id:YutaKa:20191026075914p:plain

「このアプリは確認されていません」は、Google の verification process に従って安全性を確認していないために表示されるそうです。

今回は、スクリプト作成も自分で行っていますし、モジュールもgoogleのものしか使用していないので、強行突破します!!(自己責任で実施してください!)

詳細を表示して、安全ではないページに移動します(心理的抵抗がありますが・・・)。

f:id:YutaKa:20191026082009p:plain

再度ログインすると、権限付与の画面が出るので許可します。

f:id:YutaKa:20191026082137p:plain

続いて似たような画面がでますが、許可しておきます。最後に次の文章が表示されれば認証完了です!

f:id:YutaKa:20191026082431p:plain

スプレッドシート読み込み

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])

出力結果:

f:id:YutaKa:20191026084906p:plain

お疲れ様でした!

まとめ

前編、後編をあわせてGoogle スプレッドシートを編集(読み込み)するための方法をまとめました。

後編の大きな流れとしては

  1. pythonからアクセストークン要求
  2. Googleアカウントで許可
  3. pythonでスプレッドシート操作用のオブジェクト作成
  4. スプレッドシート操作

という手順ですね。

今回のスクリプトでは実行するたびに、毎回、Googleアカウントで許可をしないといけないので、とてもめんどうです。

通常は、このプロセスを一定期間省略するために、リフレッシュトークンというものを利用します!

次回はこのあたりをまとめようと思います!