題名の通りです…。
(個人的な話ですが、)スクレイピングしたデータをスプレッドシートに書き出したかったのですが、
既存のスプレッドシートを編集する方法の記事はよく見かけても、
スプレッドシートを新規作成して編集する記事を見つけられなかったので共有します…!
この記事では、Google Driveの扱い方とスプレッドシートの扱い方を同時に簡単に紹介しています。
対象読者
- pythonでgoogleスプレッドシートを扱いたい
- 任意のフォルダを指定してスプレッドシートを新規作成したい
流れ
- サービスアカウントキーの取得 (jsonファイル)
- スプレッドシートを作成したいフォルダをサービスアカウントと共有
- プログラミング!!
サービスアカウントキーの取得 (jsonファイル)
プログラミングでDriveとスプレッドシートを扱うためには、Google Drive ApiとGoogle Sheets Apiを有効にしたサービスアカウントを用意する必要があります。
以下の記事がとても参考になったので、こちらを参考にサービスアカウントキーを取得します。
PythonでGoogleスプレッドシートを編集
スプレッドシートを作成したいフォルダをサービスアカウントと共有
スプレッドシートを作成したいフォルダを共有します。
[共有>他のユーザーと共有] でサービスアカウントのメールアドレスを入力します。
(サービスアカウントのメールアドレスはサービスアカウントキーのファイルのclient_emailでも確認可能)
また、ここでフォルダのIDを確認しておきます。
フォルダのIDは以下のように、urlの一部になっています。
https://drive.google.com/drive/folders/<フォルダのID>
プログラミング!!
環境
- macOS 10.15.4
- python 3.7.3
- pip 19.3.1
環境構築
pip install gspread oauth2client google-api-python-client google-auth-httplib2 google-auth-oauthlib pydrive
プログラム作成
下準備は完了しました!
これより、write_spread.pyに書いていきます。
特定のフォルダにsample_spreadというタイトルのスプレッドシートを作成します。
ディレクトリ構成
app/
├ write_spread.py
└ サービスアカウントキー.json
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import pprint
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
json_keyfile_path = 'サービスアカウントキー.json'
# サービスアカウントキーを読み込む
credentials = ServiceAccountCredentials.from_json_keyfile_name(
json_keyfile_path, scope)
# pydrive用にOAuth認証を行う
gauth = GoogleAuth()
gauth.credentials = credentials
drive = GoogleDrive(gauth)
folder_id = '<フォルダのID>'
f = drive.CreateFile({
'title': 'sample_spread',
'mimeType': 'application/vnd.google-apps.spreadsheet',
"parents": [{"id": folder_id}]})
f.Upload()
# 作成したスプレッドシートの情報を出力
pprint.pprint(f)
# gspread用に認証
gc = gspread.authorize(credentials)
# スプレッドシートのIDを指定してワークブックを選択
workbook = gc.open_by_key(f['id'])
worksheet = workbook.sheet1
# A1のセルに入力
worksheet.update_acell('A1', 'Hello World!')
# 2行目の1~3列目に入力
cell_list = worksheet.range(2, 1, 2, 3)
cell_list[0].value = '連番'
cell_list[1].value = '名前'
cell_list[2].value = '電話番号'
# スプレッドシートを更新
worksheet.update_cells(cell_list)
プログラム実行
$ python write_spread.py
以上で、Google Driveの指定のフォルダにsample_spread
というスプレッドシートが作成されていて、書き込みもされていると思います!
参考文献
PythonでGoogleスプレッドシートを編集
GoogleDriveとColaboratory間のデータ操作まとめ [PyDrive]
サーバでGoogleDriveAPI + Python【導入編】