Pythonでスプレッドシートに書き込む方法(Spread Sheet)
Pythonからスプレッドシートにアクセスするには、下記の2点の準備が必要です。この記事では下記設定手順について解説します。
この記事で紹介している設定は15分ほどの作業となっています。GCPには無料枠があるので、枠の範囲内であればどなたでも無料で利用することができます。
- (STEP1)Google Cloud Platform(GCP)でプロジェクトの設定
- (STEP2)Googleスプレッドシートの設定
GCPの無料枠について確認しておこう!
はじめにGCPの無料枠について確認してみましょう!
GCPをはじめて利用開始すると1年間300ドル分のクレジットがついた無料期間がはじまります。この期間であれば課金が発生することはありません。クレジットカードの登録は必須ですが期間が終了しても自動的に課金が始まることはありません。
1年間が経過後は本登録のお手続きをすれば利用中のAPIを使い続けることができます。本登録後もAlways Freeという、GCPの各サービスに設けられた無料枠がありますので、その範囲内で使用する限りは無料で使い続けることが可能です。(具体的な使用量についてはこちらのGoogle公式情報をご確認ください。)
ただし、本登録後は無料使用量を超えると自動で課金されてしまいますのでご注意ください。使用量が一定のラインを越えたらメール通知を受ける設定もあるので設定しておくことをおすすめします。(メール通知を設定しても自動課金がストップするわけではありません。)
(STEP1)GCPの設定
GoogleサービスのAPIを使用するには、Google Cloud Platform(以下GCP)の利用登録が必要です。
GCPアカウントをお持ちでない方はアカウントを作成します。無料枠で利用する場合もクレジットカードの登録が必要になります。
[GCP]プロジェクトの作成
▼登録ができましたら、GCPコンソールを開きます。
▼プロジェクトの選択をクリックします。
▼プロジェクトの選択画面が開きます。「新しいプロジェクト」をクリックします。
▼プロジェクト名を入力して「次へ」をクリックします。
これでプロジェクトが作成されます。
[GCP]プロジェクトへライブラリを追加する
▼左上メニューを開き、「APIとサービス」→「ライブラリ」をクリックします。
▼Google driveと検索して、「Google Drive API」を探してクリックします。
▼追加できました。
▼同じ要領で「Sheets api」と検索して「Google Sheets api」を追加します。
▼2つライブラリが追加できたか確認をします。左上のハンバーガーメニューを開き、「api」とサービス」→「ダッシュボード」をクリックします。
▼ダッシュボードの中に2つのAPIの名前が表示されていたら追加成功です。
[GCP]サービスアカウントを作成する。
▼左上のハンバーガーメニューを開き、「APIとサービス」→「認証情報」をクリックします。
▼認証情報を作成をクリックします。
▼「サービスアカウント」をクリックします。
▼サービスアカウントの①名前、②説明を入力して③作成して続行をクリックします。
▼サービスアカウントのロールを追加します。書き込みを行う場合は編集者を選択します。
▼完了をクリックします。
以上でサービスアカウントの作成ができました。
[GCP]JSON秘密鍵ファイルを作成する。
▼サービスアカウントの追加ができました。作成したサービスアカウントの編集アイコンをクリックします。
▼「キー」タブをクリックします。
▼鍵を追加をクリックします。
▼新しい鍵を作成をクリックします。
▼キーのタイプを「JSON」を選択し「作成」をクリックします。
▼キーが作成されダウンロードが始まります。このファイルは今後、これから作成するPythonスクリプトファイルを実行するたびに読み込むファイルとなります。大切に保管しましょう。
ここまででGCPの設定はおわりです。次はスプレッドシートを作成と設定をしていきます!
(STEP2)スプレッドシートの設定
ここからは、スプレッドシートの設定を行います。
▼ STEP1にてGCPでダウンロードしたJSON秘密鍵ファイルを開き“client_email”のところのメール形式のバリューをコピーします。(赤字部分)
{ "type": "service_account", "project_id": "searchresultpythontogspread", "private_key_id": "***************************", "private_key": "-----BEGIN PRIVATE KEY-----\************", "client_email": "**************@*************.iam.gserviceaccount.com", イカ省略 }
▼ブラウザでスプレッドシートを開き、画面右上の共有ボタンをクリックします。
▼JSONに記述されていたメールアドレスを追加して完了ボタンをクリックします。
以上でスプレッドシートにPythonからアクセスして書き込む設定は終わりです。
Pythonで読み込みだけではなく、書き込みも行う場合は、編集権限も付与してくださいね。
スプレッドシートIDの取得
▼Pythonコードを記述するときに必要になるシートIDをコピーします。シートIDは、スプレッドシートを開いたときにブラウザのアドレスバーに表示されるURLの下記赤字の部分です。赤字部分をコピーしておきましょう。
https://docs.google.com/spreadsheets/d/********************************************/edit#gid=0
シートIDとは、シートを特定するためにスプレッドシートファイルに割り当てられたユニークIDです。
以上でスプレッドシートの設定はおわりです。何度もいいますがSTEP1でDLしたJSONファイルはPythonコードから読み込みを行うので、この後も大切に保管してくださいね。
Pythonプログラムの作成
ここからは、Pythonを操作していきます。わたしの環境はWindows+VisualStudio Code+Pip環境ですので、その環境を前提として解説させていただきます。Pythonのインストールの説明は省略します。
必要なPythonパッケージをインストールします。
VS Codeのターミナル(あるいはターミナル、コマンドプロンプト)を開き、下記の2つのパッケージをインストールしましょう。(Macはpip→pip3コマンドかもしれません。また、pipではなくcondaの人もいるかもしれません。)
$ pip install gspread $ pip install oauth2client
gspread
はスプレッドシートを操作するパッケージ、oauth2client
はGoogleとの認証を簡略化するためのパッケージです。
お決まりの文句を記述する。
下記は、スプレッドシートにアクセスするときに必ず記述するお決まりのコードです。(良く使うのでコピペツールに保存しておくと便利です。ちなみに私はBoostNoteとCliborを使っています。)
import gspread from google.oauth2.service_account import Credentials # お決まりの文句 # 2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない scope = ['https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/drive'] #ダウンロードしたjsonファイル名をクレデンシャル変数に設定。 credentials = Credentials.from_service_account_file("JSONファイルのパス", scopes=scope) #OAuth2の資格情報を使用してGoogle APIにログイン。 gc = gspread.authorize(credentials) #スプレッドシートIDを変数に格納する。 SPREADSHEET_KEY = 'シートID' # スプレッドシート(ブック)を開く workbook = gc.open_by_key(SPREADSHEET_KEY)
コード文中の、
「シートID」のところは、先程取得したスプレッドシートのURLから取得したシートIDに置き換えてください。
「JSONファイルのパス」は、先程取得したJSONファイルのフルパスか相対パスに置き換えてください。
テストコード
さて、ようやくこれでいよいよgspreadパッケージを使用してコードを好きなように書いていく準備は整いました。
ですがその前に、簡単なコードを書いてスプレッドシートとの連携が本当にできるのかテストをしてみましょう。下記のコードを先ほど紹介した”お決まりの文句”の下に追記してみてください。「スプレッドシートの”シート1”という名前のシートのA1セルに”test value”という文字を挿入する」という簡単なコードです。コードが作成できたらスクリプトを実行して、スプレッドシートのA1セルに出力されるかチェックしてみてくださいね。
# スプレッドシート(ブック)を開く workbook = gc.open_by_key(SPREADSHEET_KEY) # シートの一覧を取得する。(リスト形式) worksheets = workbook.worksheets() print(worksheets) # シートを開く worksheet = workbook.worksheet('シート1') # セルA1に”test value”という文字列を代入する。 worksheet.update_cell(1, 1, 'test value')
エラーがでた、スプレッドシートに書き込みができない場合
良くあるエラーとして下記があります。確認してみてくださいね。
- JSONファイルのパスの記述が間違っている。
- 混乱しないようにJSONファイルをPythonスクリプトファイルと同じフォルダに保存して、スクリプトファイル内でファイル名だけで指定してみてください。
- 混乱しないようにJSONファイルをPythonスクリプトファイルと同じフォルダに保存して、スクリプトファイル内でファイル名だけで指定してみてください。
- JSONファイルが壊れている。
- STEP1に戻り、JSONファイルの取得のところをもう一度実施し、JSONファイルを再取得してみてください。JSONファイルの名前を変更することは良くないという情報もありました。名前を変更しないでトライしてみてください。(わたしは変更しても使用できました。)
- STEP1に戻り、JSONファイルの取得のところをもう一度実施し、JSONファイルを再取得してみてください。JSONファイルの名前を変更することは良くないという情報もありました。名前を変更しないでトライしてみてください。(わたしは変更しても使用できました。)
- シートIDの記入ミス
- シートIDをもう一度確認しなおしてみてください。
▼スプレッドシートの共有設定ができていないとコンソールに下記のようなエラーがでます。きちんと「編集者」になっているか確認しましょう。
gspread.exceptions.APIError: {‘code’: 403, ‘message’: ‘The caller does not have permission’, ‘status’: ‘PERMISSION_DENIED’}
Pythonスクリプトの作成方法
gspreadライブラリの使い方
以上でPythonから、スプレッドシートを操作するための準備と基本は終わりです。あとはgspreadパッケージを使ってコードをゴリゴリ書いていきましょう!
gspreadの具体的な使い方は下記の記事でまとめています。
Pythonを学ぶならコチラの講座がおすすめです。
わたしは「デイトラPythonコース」でPythonを学びました。
先着1000名まで1万円引きキャンペーン実施中!(8月31日まで)
\買い切りだからコスパ最高・永久にユーザーコミュニティ参加可能/
2021年08月16日現在 10,000円OFFキャンペーン中のようですので興味のある方はリンクから詳細をご確認ください。キャンペーンは終了し現在は通常価格のようです。