事前準備
1.Google Cloud Platformのプロジェクトを作成する。
以下のURLにアクセスします。
https://console.developers.google.com/
もし、Googleアカウントでログインしてないゲスト状態になっている場合はログインしましょう。
プロジェクトを作成する。
- 「プロジェクトを作成」をクリック
- プロジェクト名を入力(例:My Project Testなど)
- 「作成」をクリックする。
2.Google Drive APIを有効にする。
- サイドバーにあるライブラリを選択する。
- 検索窓に「Drive」と入力して検索する。
- 「Google Drive API」が表示されるので選択する。
- 「有効にする」をクリックする。
3.Google Sheets APIを有効にする。
- サイドバーにあるライブラリを選択する。
- 検索窓に「Sheets」と入力して検索する。
- 「Google Sheets API」が表示されるので選択する。
- 「有効にする」をクリックする。
4.外部アプリからスプレットシートにアクセスするための認証情報を設定する。
サービスアカウントを作成する。
- サイドバーにある「認証情報」を選択する。
- 画面上部の「認証情報を作成」を選択する。
- 「サービスアカウント」を選択する。
- 「サービスアカウント名」を入力する。(例:sheets-test)
- 「作成」をクリックする。
- 「このサービス アカウントにプロジェクトへのアクセスを許可する」は「続行」をクリックします。
- そのまま「完了」をクリックします。
秘密鍵を作成する。
- 作成したサービスアカウントのメールアドレスをクリックします。
- 画面上部の「キー」をクリックする。
- 「鍵を追加」→「新しい鍵を作成」をクリックする。
- キーのタイプに「JSON」がついた状態で「作成」をクリックする。
これで秘密鍵の生成は完了です。この鍵は無くさないようにしましょう。
5.スプレットシート側の共有設定をする。
- 読み込む対象のスプレットシートを開きます。
- 右上の「共有」をクリックします。
- 「ユーザーやグループを追加」に対して「サービスアカウントのメールアドレス」をコピペします。
- サービスアカウントは実際にメールアドレスがあるわけではないので「通知」のチェックは外しておきましょう。
- 「送信」をクリックします。
6.パッケージをインストールする。
1 |
pip install gspread oauth2client |
gspread
スプレットシート操作のためのパッケージ
oauth2client
認証情報を処理するためのライブラリ(現在は非推奨になっています。)
読み込み
セル「A1」の値を標準出力するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import gspread from oauth2client.service_account import ServiceAccountCredentials # jsonファイルを使って認証情報を取得 scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] c = ServiceAccountCredentials.from_json_keyfile_name('ダウンロードした秘密鍵jsonのパス', scope) # 認証情報を使ってスプレッドシートの操作権を取得 gs = gspread.authorize(c) # 共有したスプレッドシートのキー(後述)を使ってシートの情報を取得 SPREADSHEET_KEY = '開いているスプレットシートのURLの「/d/」と「/edit#gid=0」の間の長い文字列' worksheet = gs.open_by_key(SPREADSHEET_KEY).worksheet('シート名') print(worksheet.acell('A1').value) |
pandasのDataFrameにする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import pandas as pd # シートオブジェクトを取得 workbook = gs.open_by_key(SPREADSHEET_KEY) worksheet = workbook.worksheet('シート名') df = pd.DataFrame(worksheet.get_all_values()) print(df.head()) # シート内容がdataFrameの形で読み取れている。 # 1行目のデータを読み取る。 df.columns = df.iloc[0] print(df.head()) # 1行目のデータを削除する。 df = df.drop(df.index[[0]]) print(df.head()) # 各列のデータ型を確認 print(df.dtypes) |
get_all_values
シート内の値を多次元リストに変換する関数。
書き込み
ライブラリのインストール
1 |
pip install gspread_dataframe |
サンプル
1 2 3 4 5 |
from gspread_dataframe import set_with_dataframe # シートオブジェクトを取得 workbook = gs.open_by_key(SPREADSHEET_KEY) workbook.add_worksheet(title='newSheet', rows=50, cols=10) set_with_dataframe(workbook.worksheet('newSheet'), df, include_index=True) |
試しに「newSheet」というシートを作って上のDataFrameを書き出していみます。
workbook.add_worksheet(title='newSheet', rows=50, cols=10)
シートをスプレットシートに追加しています。rowsやcolsを領域を決めれます。(通常のExecelと違ってシートのセル範囲のサイズを決めれます。)
set_with_dataframe
データフレームの内容をワークシートに反映するための関数です。
include_index
データフレームのインデックス番号を書き出すかどうかです。Trueなら書き出します。
ワークシートを削除する。
1 |
workbook.del_worksheet(workbook.worksheet('newSheet')) |
再度add_worksheetを実行するとエラーになってしまいます。再度実行したい場合は上記関数で削除します。
この記事へのコメントはありません。