【Python】Googleスプレッドシートの読み書き

今日もPythonネタ。Pythonを使ったGoogleスプレッドシートの更新方法について。
実際にAWS Lambdaからスプレッドシートを更新するときにこの方法を使ってます。

環境情報

・Python3.7
・AWS Lambda

事前準備

1.Google Cloud Platformでプロジェクトを作成
2.作成したプロジェクトでGoogle Drive APIとGoogle Sheet APIを有効にする
3.サービスアカウント作成
4.サービスアカウントキーを作成&JSONファイルダウンロード
5.操作するスプレッドシートの共有設定に上記3で作成したサービスアカウントを追加

詳細は以下を参照。

APIの上限設定

作成したプロジェクトの「IAM と管理者」の割り当てページで確認できるようです。

画像1

・ユーザごとで100秒あたりの読み込みリクエスト:100件まで
・ユーザごとで100秒あたりの書き込みリクエスト:100件まで
など

レンジ情報を取得する場合は、ループを回して1セルずつ取得するのではなく、範囲を指定してrangeで取得した方が良いです。

サンプルプログラム

import gspread
from oauth2client.service_account import ServiceAccountCredentials

# スプレッドシートキーを指定。スプレッドシートのURLの https://docs.google.com/spreadsheets/d/[スプレッドシートキー]/edit#gid=yyyyy
SPREADSHEET_KEY = "XXXXXXXXXXXXXXXXXX"
# 事前準備の手順4でダウンロードしたJSONファイルを指定
json_keyfile = "/opt/python/gspread/gspread_auth.json"

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_keyfile, scope)
gc = gspread.authorize(credentials)
workbook = gc.open_by_key(SPREADSHEET_KEY)

sheet_name = "シート名"
range_str  = "A1:B1"

worksheet = workbook.worksheet(sheet_name)
# 読み込みリクエストが発生
cells = worksheet.range(range_str)

# A1セル更新
cells[0].value = 1
# B1セル更新
cells[1].value = 2

# スプレッドシートへ反映(書き込みリクエストが発生)
worksheet.update_cells(cells)

(おまけ)gspreadをLayer用にzipにまとめる

Linux環境で以下のコマンドを実行してzipを作成。
サービスアカウントの秘密鍵(JSONファイル)もgrspread/pythonディレクトリに格納する。

# mkdir -p gspread/python
# cd gspread/python
# pip install gspread -t .
# pip install oauth2client -t .
※秘密鍵(JSONファイル)もこのディレクトリに格納する
# cd ..
# zip -r gspread.zip ./python

作成したzipファイルをAWS LambdaのLayerにアップロード。


いいなと思ったら応援しよう!