pythonからGoogleスプレッドシートのデータ読み込んだり、書き込んだりする方法を記載します。
今回のゴール
pythonのプログラムから以下の操作をします。
- GoogleスプレッドシートのA1セルを読み込む(セルには数字が記載)
- 読み込んだ数字を+1する
- +1した数字をA1セルに書き込む
Before
After
今回作成したプログラム
先に今回作成したプログラム一式を載せておきます。
Google APIの設定
pythonからスプレッドシートにアクセスには、Googleの各種APIを利用できるようにする必要があります。すでに設定済みの箇所があれば、読み飛ばしてください。
Google Cloud Platformのプロジェクトを作成
Google Cloud Platformのダッシュボードから「新しいプロジェクト」を作成します。
Google Drive APIを有効化
Google Cloud Platformの検索窓で「Google Drive API」を入力すれば、そこから有効化できます。
Google Sheets APIを有効化
同様に「Google Sheets API」も有効化します。
認証情報をダウンロード
Google Cloud Platformの検索窓で「認証情報」を入力し、任意のサービスアカウントを編集します。
鍵が未作成であれば、「鍵を追加」で作成します。※JSON形式
ローカルにJSON形式の鍵ファイルがダウンロードされます。
※今回は、「gss_credential.json」とリネームします。
Googleスプレッドシートの準備
今回は、以下のような名前を設定しました。
ファイル名:Tempスプレッド
シート名:シート名1
また、権限は誰でもアクセス可能にしました。
※業務で使う場合は、適切な権限を付与してください。
ここで、スプレッドシートのキーを控えておきましょう。
スプレッドシートのキーは、URLで確認できます。
例えばURLが
https://docs.google.com/spreadsheets/d/◯◯◯◯◯◯/edit#gid=0
とすると「◯」の部分になります。
pythonプログラムを作成~実行
pythonプログラム
pythonプログラムmain.pyをコーディングしていきます。
フォルダ構成は以下の通りです。
import os
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# 環境変数の設定
GSS_TEMP_KEY = os.environ['GSS_TEMP_KEY']
# worksheetの情報を返す関数
def get_gss_worksheet(gss_name, gss_sheet_name):
#jsonファイルを使って認証情報を取得
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
c = ServiceAccountCredentials.from_json_keyfile_name('../gss_credential.json', scope)
#認証情報を使ってスプレッドシートの操作権を取得
gs = gspread.authorize(c)
# スプレッドシート名をもとに、キーを設定
if gss_name == "Tempスプレッド":
spreadsheet_key = GSS_TEMP_KEY
#共有したスプレッドシートのキーを使ってシートの情報を取得
worksheet = gs.open_by_key(spreadsheet_key).worksheet(gss_sheet_name)
return worksheet
def main():
# スプレッドシートを定義
worksheet = get_gss_worksheet(gss_name='Tempスプレッド', gss_sheet_name='シート名1')
# スプレッドシートを読み込み
value = worksheet.acell("A1").value
print(value)
value = int(value) + 1
# スプレッドシートを更新
worksheet.update_acell("A1", value)
if __name__ == "__main__":
# mainの実行
main()
ライブラリのインストール
pythonに必要なライブラリをインストールします。
pip install gspread oauth2client
プログラムの実行
環境変数GSS_TEMP_KEYに、先ほど「Googleスプレッドシートの準備」で控えたスプレッドシートのキーを設定してから実行します。
$env:GSS_TEMP_KEY="◯◯◯◯◯◯"
python main.py
これで、pythonからGoogleスプレッドシートのデータ読み込んだり、書き込んだりすることができます。
(参考)本番環境にデプロイする場合
鍵ファイル(gss_credentail.json)は、認証情報なのでgitリポジトリにアップロードするのは好ましくないです。
そのため、本番環境にデプロイする場合は、以下のプロセスで鍵ファイルを作成すると良いです。
- 鍵ファイルをbase64でエンコード
例:base64 gss_credential.json - 1で出力された文字列を環境変数に設定
例:GSS_JSON_CREDENTIAL=[1で出力された文字列] - 本番デプロイ時にbase64でデコードし、ファイルを作成
例:base64 –decode > gss_credential.json
GitHub Actions ワークフローの例を以下に載せておきます。
name: "Deploy"
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v0
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
- name: Decode credential
env:
GSS_JSON_CREDENTIAL: ${{ secrets.GSS_JSON_CREDENTIAL }}
run: |
echo $GSS_JSON_CREDENTIAL | base64 --decode > gss_credential.json
- name: deploy
run: gcloud app deploy
コメント
プログラムの実行
環境変数GSS_TEMP_KEYに、先ほど控えたスプレッドシートのキーを設定してから実行します。
$env:GSS_TEMP_KEY=”◯◯◯◯◯◯”
python main.py
は、具体的にどのようにしたらよいのでしょうか。
プログラミング初心者です。不躾ですみません。よろしくお願いします。
コメントありがとうございます。
まず、
$env:GSS_TEMP_KEY=”◯◯◯◯◯◯”
となっているところの◯◯◯◯◯◯を書き換えてあげる必要があります。
書き換える値は、「Googleスプレッドシートの準備」で取得した、スプレッドシートのキーになります。
そのあとに、main.pyがあるディレクトリ上でコマンドプロンプトを開き、
以下のコマンドを実行すれば、プログラムが動くはずです。
$env:GSS_TEMP_KEY=”書き換えた値”
main.py