【Python】Pythonでスプレッドシートを操作する-準備編

本ページはプロモーションが含まれています

クラウドソーシングで”スクレイピング結果をスプレッドシートへ書き込むツールを作ってほしい“とか”スプレッドシートに入力した値を条件として読み込んで処理をしてほしい“などPythonからスプレッドシートを操作する要望を受けることがあるのですが、クライアント側でも対応していただくことがあるのでご案内用ページも兼ねて準備方法まとめました

外部からスプレッドシートを操作するにはAPIの有効化が必要

GoogleスプレッドシートはExcelのように自分のパソコンの中にあるファイルを操作するわけではなく、Google Driveの中(つまりネットワーク上)にあるサービスを操作する都合、APIで対応する必要があります

そのAPIはいつでも自由に利用できるわけではなく、Google Cloud(GCP)での事前準備が必要になるのでAPIの有効化と秘密鍵の生成が必要です

まず最初に

(Googleアカウントの作成は流石に省略・・・)

Google CloudのWelcome 画面から利用開始するのですが、”無料で利用開始“ボタンをクリックしそうなところを”コンソール“リンクでOK

初めて開く場合は”利用規約“への同意と”更新情報をメールで受信”要否を聞かれるので利用規約は必須でチェック

ここまででGoogle Cloudを利用する最低限の状態に

プロジェクトを作る

APIを使うためにまずは”プロジェクト”なるものを作成する必要がありますので下記手順で作成

  1. プロジェクトの選択“をクリック
  2. 新しいプロジェクト“をクリック
  3. プロジェクト名“を適当に登録
  4. 作成“ボタンをクリック

場所“は大半の人は”組織なし”のままでOK

プロジェクトの作成完了にもう一度”プロジェクトの選択“をクリックすると先ほど作成したプロジェクトがあるので選択しておく

APIを有効化する

ここからようやくAPIの設定に

左上のハンバーガーからメニューを表示させて”APIとサービス“→”有効なAPIとサービス“でメニューを表示する

まだ有効なAPIがなく、真っ白になっているはずなので”API とサービスを有効化“もしくは左側のメニューにある”ライブラリ“で設定メニューへ

相当数のAPIがありますが、今回は”Google Workspace“カテゴリにある”Google Sheets API“と”Google Drive API“が必要なのでそれぞれ有効化

なんでGoogle Driveも必要かと言うとスプレッドシートがドライブの中に保存されているから

完了すると先ほど真っ白だった画面に有効化したAPIが表示されて利用状況の計測が増えていることが確認できる

認証情報

続いてAPIを利用するための認証準備

画面上部の“認証情報を作成“→”サービスアカウント“へ

サービス アカウントの詳細

まずはアカウントIDを作成する

サービスアカウント名“をお好みで入力すると勝手に”サービスアカウントID“が生成されるので変更の必要が無ければそのまま採用を

サービスアカウントの説明“は必要に応じて入力しつつ”作成して続行“を

このサービス アカウントにプロジェクトへのアクセスを許可する(省略可)

続いて利用可能なアカウントの設定

書いてある通り省略可能ですが”ロール“(≒権限)の設定や”IAM“(アクセス制御)の設定も可能

今回は発注先にプログラムを作ってもらう前提なので気になる方は制御してもいいですが後から設定もできるので今の段階では省略でOK

ユーザーにこのサービス アカウントへのアクセスを許可 (省略可)

ここも省略でOK

最後にサービスアカウントの管理を確認

無事サービスアカウントが追加されているはず

次工程のために”サービスアカウント管理“をクリックして管理メニューへ遷移しておく

秘密鍵ファイルを作成する

作成したサービスアカウントの右側にある”操作する”にある”“(縦の三点リーダー)をクリックして”鍵を登録“を選択

続いて”鍵を追加“→”新しい鍵を作成

キーのタイプは”JSON“を選択して作成

自動で秘密鍵ファイルがダウンロードされるのでこれを発注先へ渡してください

最後にスプレッドシートを共有

あとは対象のスプレッドシートのURLや参照・更新してほしい情報を伝えるだけですがこのままではプログラムでエラーが起こります

例外が発生しました: PermissionError
{'code': 403, 'message': 'The caller does not have permission', 'status': 'PERMISSION_DENIED'}
gspread.exceptions.APIError: {'code': 403, 'message': 'The caller does not have permission', 'status': 'PERMISSION_DENIED'}

The above exception was the direct cause of the following exception:

  File "C:\Users\thosh\デスクトップ\python\mercari.py", line 9, in <module>
    sheet = gc.open_by_url('https://docs.google.com/spreadsheets/d/1cT_wQXpv0wfsMakmGtOq2tkd4htSwvMDDbsbgVPe3MQ/edit#gid=0').worksheet('テストシート')
PermissionError: 

原因はエラーにも書いてある通り”許可”されていないんですね

何の許可かと言えばスプレッドシート自体の閲覧or編集許可なんでファイルの共有設定から参照してもらうだけなら”閲覧者“、実際に操作してもらうなら”編集者“で設定しましょう

ここまでくればPythonでスプレッドシートの操作ができます!!

あとがき

Pythonでのスプレッドシート操作自体は難しくないのですがここまでの事前準備がが結構面倒くさい・・

信頼できる発注先なら相手のGoogle Driveで運用してもらって共有設定してもらうのもありじゃないでしょうか

コメント

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