gspreadを使ってpythonからGoogle Spreadsheetsを編集する
動機
これ自動で作れるんじゃない? と思えるエクセルのドキュメントが目についたのでやってみた
前提条件
ながれ
- プロジェクトを作成する
- Google Drive APIをオンにする
- Credentialを発行する
- 操作したいスプレッドシートにユーザを登録
- プログラムを作って操作
1. プロジェクトを作成する
Google API Consoleにアクセスして、新規プロジェクトを作成する。
2. Google Drive APIをオンにする
作成したプロジェクトのGoogle Drive API をオンにする。
↓のリンクでオンにするページにいける
3. Credentialを発行する
引き続き、作成したプロジェクトのCredentialの設定から、Service Account Keyの作成を選択。
適当なサービスアカウントを選択し、Key typeは、JSONを選択して、Createをクリックします。
すると、キーを含んだJSONファイルがダウンロードされるので、これから作るpythonプログラムから参照しやすい場所にてきとうに保存します。
4. 操作したいスプレッドシートにユーザを登録
先ほどダウンロードしたJSONファイルを開いてみると、client_emailというキーの値に、"プロジェクト名-xxxx@appspot.gserviceaccount.com"といった形のメールアドレスが記載されているので、クリップボードにコピーします。
次に、編集したいGoogle Spreadsheetを作成して、共有設定から、上でクリップボードにコピーしたメールアドレスを編集可能でインバイトします。
5. プログラムを作って操作
ようやくpythonを書きます。
pythonは、2系を使っています。
まず、gspreadとoauth2clientをインストールします。
$ pip install gspread ...略 $ pip install oauth2client ...略
次にpythonのコードをかきます。
import gspread from oauth2client.service_account import ServiceAccountCredentials scope = ['https://spreadsheets.google.com/feeds'] # 3でダウンロードしたjsonファイルを指定する credentials = ServiceAccountCredentials.from_json_keyfile_name('プロジェクト名-zzzzzzzzz.json', scope) gc = gspread.authorize(credentials) # 4で作成したスプレッドシートの名前を指定する # スプレッドシートの名称以外に、 # URLに含まれるIDで開くopen_by_key、URL自体を指定してスプレッドシートを開くopen_by_url # というメソッドもある。 Credentialのメールアドレスでパーミッションが与えられているものしか開けない # ので、注意! wks = gc.open("gspread example").sheet1 # A1セルの値を取得 print wks.acell('A1') # A1セルを更新 wks.update_acell('A1', u'Hello, gspread.')
まだ、細部までチェックはできていませんが、ひと通りの操作については、以下のAPI Referenceを見た感じできそうです。