SCUEL開発者ブログ

医療機関および介護事業所などのデータベース事業『SCUEL』を作っているエンジニア達のブログです。エンジニア募集中です!ご興味がありましたら、以下のフォームからお問い合わせください。 http://goo.gl/forms/8fPwBHDL2H

gspreadを使ってpythonからGoogle Spreadsheetsを編集する

動機

これ自動で作れるんじゃない? と思えるエクセルのドキュメントが目についたのでやってみた

前提条件

  • Googleアカウントを持っている
  • pythonが動く環境がある(本記事はUbuntu 14.04 LTS上でやってます)

ながれ

  1. プロジェクトを作成する
  2. Google Drive APIをオンにする
  3. Credentialを発行する
  4. 操作したいスプレッドシートにユーザを登録
  5. プログラムを作って操作

1. プロジェクトを作成する

Google API Consoleにアクセスして、新規プロジェクトを作成する。

gyazo.com

2. Google Drive APIをオンにする

作成したプロジェクトのGoogle Drive API をオンにする。

↓のリンクでオンにするページにいける

Google API Console

gyazo.com

3. Credentialを発行する

引き続き、作成したプロジェクトのCredentialの設定から、Service Account Keyの作成を選択。

gyazo.com

適当なサービスアカウントを選択し、Key typeは、JSONを選択して、Createをクリックします。

gyazo.com

すると、キーを含んだJSONファイルがダウンロードされるので、これから作るpythonプログラムから参照しやすい場所にてきとうに保存します。

4. 操作したいスプレッドシートにユーザを登録

先ほどダウンロードしたJSONファイルを開いてみると、client_emailというキーの値に、"プロジェクト名-xxxx@appspot.gserviceaccount.com"といった形のメールアドレスが記載されているので、クリップボードにコピーします。

次に、編集したいGoogle Spreadsheetを作成して、共有設定から、上でクリップボードにコピーしたメールアドレスを編集可能でインバイトします。

gyazo.com

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を見た感じできそうです。

gspread API Reference — gspread 0.3.0 documentation