[python]Googleスプレッドシートの連携(読み込み、書き込み)する方法

スポンサーリンク
スキル

pythonからGoogleスプレッドシートのデータ読み込んだり、書き込んだりする方法を記載します。

今回のゴール

pythonのプログラムから以下の操作をします。

  • GoogleスプレッドシートのA1セルを読み込む(セルには数字が記載)
  • 読み込んだ数字を+1する
  • +1した数字をA1セルに書き込む

Before

After

今回作成したプログラム

先に今回作成したプログラム一式を載せておきます。

GitHub - mashimashi0/python-gss
Contribute to mashimashi0/python-gss development by creating an account on GitHub.

Google APIの設定

pythonからスプレッドシートにアクセスには、Googleの各種APIを利用できるようにする必要があります。すでに設定済みの箇所があれば、読み飛ばしてください。

Google Cloud Platformのプロジェクトを作成

Google Cloud Platformのダッシュボードから「新しいプロジェクト」を作成します。

Google Cloud Platform
Google Cloud Platform lets you build, deploy, and scale applications, websites, and services on the same infrastructure as Google.

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リポジトリにアップロードするのは好ましくないです。
そのため、本番環境にデプロイする場合は、以下のプロセスで鍵ファイルを作成すると良いです。

  1. 鍵ファイルをbase64でエンコード
    例:base64 gss_credential.json
  2. 1で出力された文字列を環境変数に設定
    例:GSS_JSON_CREDENTIAL=[1で出力された文字列]
  3. 本番デプロイ時に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

コメント

  1. 伊藤 より:

    プログラムの実行

    環境変数GSS_TEMP_KEYに、先ほど控えたスプレッドシートのキーを設定してから実行します。

    $env:GSS_TEMP_KEY=”◯◯◯◯◯◯”
    python main.py

    は、具体的にどのようにしたらよいのでしょうか。
    プログラミング初心者です。不躾ですみません。よろしくお願いします。

    • ましまし ましまし より:

      コメントありがとうございます。

      まず、
      $env:GSS_TEMP_KEY=”◯◯◯◯◯◯”
      となっているところの◯◯◯◯◯◯を書き換えてあげる必要があります。
      書き換える値は、「Googleスプレッドシートの準備」で取得した、スプレッドシートのキーになります。

      そのあとに、main.pyがあるディレクトリ上でコマンドプロンプトを開き、
      以下のコマンドを実行すれば、プログラムが動くはずです。
      $env:GSS_TEMP_KEY=”書き換えた値”
      main.py

タイトルとURLをコピーしました