PythonでGoogle Sheetsを編集する方法
読む所要時間: 9 分
![PythonでGoogle Sheetsを編集する方法 PythonでGoogle Sheetsを編集する方法](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/BJQ82WfSsKR4XX2Dhw_uh3HJ3OExBiZ52NtcDTzMWUEyj-zDKofcseoWHoEXXOUCv2D0fAZmaxTfH3.png)
本稿は、以下に示す「データベースが必要ない場合もある」というPatrick McKenzie氏のツイートに触発されて書きました。
このチュートリアルでは、Anton Burnashev氏のgspread Pythonパッケージを使用し、わずか数行のコードでGoogleスプレッドシートからデータの読み込み、書き込み、削除を実行する方法をご紹介します。
Google Drive APIとサービスアカウント
このチュートリアルを実践するには、スプレッドシートが必要になります。米国議会議員の全員の連絡先情報を記載したスプレッドシートをコピーし、使用してください。スプレッドシートのファイル名を任意の名前に変更してください。本稿では「米国議会議員リスト」とします。
![スプレッドシートのコピーを作成](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/U8zfGokV6a2te-ChiV3Tz6idzfva-AUM7SKiYxGScnrGow3vDQwat-TLMcyaFPUWHMqvwHT8Xxrzc7.png)
補足: Ian Webster氏は、このデータとTwilioと組み合わせて、市民が議会に簡単に電話できる方法を編み出しました。詳しくは、Twilioブログの「Call Any Representative Using One Phone Number」を参照してください。
プログラムでスプレッドシートにアクセスするには、Google APIコンソールからサービスアカウントとOAuth2認証情報を作成します。OAuth2の開発に苦労した経験がある場合でも、心配する必要はありません。サービスアカウントの使い方は非常に簡単です。
以下の手順と動画に従ってください。
- Google APIコンソールにアクセスします。
- [プロジェクトの選択]から[新しいプロジェクト]を選択し、プロジェクト名を入力し新規プロジェクトを作成します。
- APIとサービスから[ライブラリ]を選択します。Google Drive APIとGoogle Sheets APIを検索し、[有効にする]を選択します。
- Webサーバーがアプリケーションデータにアクセスするための認証情報を作成します。APIとサービスから[認証情報]を選択します。[認証情報を作成]をクリックし、[サービスアカウント]を選択します。
- サービスアカウント名を入力し、[作成を続行]を選択します。ロールを選択から[編集者]権限を選択し、[続行]を選択します。権限情報が保存されたら、[完了]を選択します。
- 作成したサービスアカウントのメールアドレスをクリックし、キーから[鍵を追加]をクリックします。[新しい鍵を作成]を選択し、キーのタイプは[JSON]を選択します。作成されたJSONファイルが自動的にダウンロードされます。
- JSONファイルをプロジェクトのルートディレクトリに移動し、ファイル名を「client_secret.json」に変更します。
![Steps to get JSON file](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/Untitled_1080_x_800_px.gif)
最後に、アプリの認証に必要なステップである編集者権限の付与を行います。見逃しがちなので注意してください。
client_secret.jsonの、client_email
をコピーします。
![JSONファイルで`client_email`が確認できる。](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/eaw7SfGu3xlXlfZM6h16zy_-S5H1dlklrYeDGWZL5V29RYIVxQb1OZaG8EqyIHc7p3MYdajpnc7xV1.png)
スプレッドシートに戻り、[共有]をクリックします。次に、クライアントのメールアカウント(client_email
)をユーザーやグループと共有フィールドに貼り付け、[送信]をクリックします。
![共有ボタン](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/tslpmA0-ENj7Nm4iKDCYRB52NobIfggNLK-xH9q25NAzfozaNhgd58cjLGNJ5Czz_Kxg6g_7oCAopQ.png)
![サービスメールアドレスに共有](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/Screen_Shot_2021-12-20_at_15.20.35.png)
この手順をスキップし、Pythonからスプレッドシートにアクセスしようとすると、gspread.exceptions.SpreadsheetNotFound
エラーが発生します。
これで終了です。次にコードに進みます。
Pythonでスプレッドシートからデータを読み込む
認証情報が設定されている場合、PythonでGoogleスプレッドシートにアクセスするには、次の2つのパッケージが必要です。
- oauth2client – OAuth 2.0を使用し、Google Drive APIで認証します。
- gspread – Googleスプレッドシートを操作します。
以下のコマンドを実行し、パッケージをインストールします。
次に、プロジェクトのルートディレクトリにspreadsheet.pyファイルを作成します。以下のコードをspreadsheet.pyファイルに追加します。
sheet = client.open("{シートのファイル名}").sheet1
の{シートのファイル名}
を編集するシートのファイル名に変更してください。今回は、ファイル名を「米国議会議員リスト」に設定したので、sheet = client.open("米国議会議員リスト").sheet1
に変更します。
プロジェクトのルートディレクトリで以下のコマンドを実行します。
python3 spreadsheet.py
綺麗に整理されたデータが出力され驚くと思います。
![データ出力](/content/dam/twilio-com/global/en/blog/legacy/2017/an-easy-way-to-read-and-write-to-a-google-spreadsheet-in-python-jp/n-TGsRMaT3Yp51Iv2T_nnlbRXxaJ4nCqlWUTnHB0HRFQnziy5stDza3t9uBhl621PwnSkIVjIDnnkH.png)
Pythonでスプレッドシートから挿入、更新、削除する
gspreadsの機能全般については、ドキュメントで詳細に解説しています。ここまでは、gspreadsの表面的な部分に触れてきました。
たとえば、データをハッシュのリストに抽出しましたが、必要に応じて複数のリストの中からリストを取得することもできます。
また、単一の行、列、セルからデータを取得することもできます。
特定のセルを変更し、スプレッドシートに書き込むこともできます。
または、スプレッドシートに行を挿入することもできます。
スプレッドシートから行を削除することもできます。
行の総数を調べることもできます。
これらの関数とその他数十種類の関数の詳細については、gspread APIリファレンスを参照してください。
PythonでGoogleスプレッドシートを使用すると、スプレッドシートを永続レイヤーとしてFlaskアプリケーションを開発したり、GoogleスプレッドシートからJupyter NotebookにデータをインポートしてPandasで分析したりできます。PythonでTwilioを試してみたい場合は、Pythonクイックスタートを参照してください。
良いプロジェクトが開発できた場合は、ぜひ教えてください。連絡先はgb[at]twilio.comまたは@greggybです。この投稿がお役に立ちましたら、ぜひご興味のありそうな方に共有してください。
レビューを提供してくれたDevin氏とSam氏、シートを提供してくれたGoogle、そして何よりも、gspreadを提供してくれたAnton氏に感謝申し上げます。