Python

[2022年版] Pythonのgspreadを使ってGoogle Spread Sheetを操作する手順を画像付きで全行程完全解説!

始めに

「Pythonのgspreadライブラリを使用したGoogle Spread Sheetの操作」を解説したブログがひと昔前の記事しか無く、googleのページの内容が更新されており、解説通りにいかなかったことが多々あったので、改めて2022年版と題して記事にしています。

是非参考にしてください。

そもそも Goole Spread Sheet とは

私なりの解釈で説明しますと、Goole Spread Sheetとは、Google社が提供しているエクセル(表計算ソフト)です。

エクセルとの違いはWebアプリケーション(ソフトのダウンロードやインストールを必要としない)なことです。

Googleスプレッドシートを使用する際は「Googleアカウント」が必要です。(その他はいりません)

また、現時点では費用も一切かかりませんので、無料で使うことが可能です。

Google Cloud Platform(GCP)の登録方法

Google Spread Sheet をPythonを使用して動かすにはまずGCPの登録が必要です。

GCPの登録にはクレジットカードの登録が必須です。しかし、有料の機能を使わなくては請求されることはありません。

サイトにアクセス

まず、以下にアクセスしてください。

https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwiQn-zm87_4AhUV0ZYKHSV3CXkYABAAGgJ0bA&ohost=www.google.com&cid=CAESa-D2z334oWoDmh8UjytK0khcum31pOv4q3icOeMSZGCJ6HREBaOxDPvnZWRLfor1VmP0-AwwOZnmo2HQs74875Evt5kkruMc5QCNpod6IrhWX4FEbaZK0bpEc0mxBgTbIqtpuwCijg-10ArF&sig=AOD64_2v43_HH0J7cQXUmiqItSlGJMlj5Q&q&adurl&ved=2ahUKEwiT1eXm87_4AhXQilYBHSjCD6sQ0Qx6BAgDEAEhttps://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwiQn-zm87_4AhUV0ZYKHSV3CXkYABAAGgJ0bA&ohost=www.google.com&cid=CAESa-D2z334oWoDmh8UjytK0khcum31pOv4q3icOeMSZGCJ6HREBaOxDPvnZWRLfor1VmP0-AwwOZnmo2HQs74875Evt5kkruMc5QCNpod6IrhWX4FEbaZK0bpEc0mxBgTbIqtpuwCijg-10ArF&sig=AOD64_2v43_HH0J7cQXUmiqItSlGJMlj5Q&q&adurl&ved=2ahUKEwiT1eXm87_4AhXQilYBHSjCD6sQ0Qx6BAgDEAEhttps://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwiQn-zm87_4AhUV0ZYKHSV3CXkYABAAGgJ0bA&ohost=www.google.com&cid=CAESa-D2z334oWoDmh8UjytK0khcum31pOv4q3icOeMSZGCJ6HREBaOxDPvnZWRLfor1VmP0-AwwOZnmo2HQs74875Evt5kkruMc5QCNpod6IrhWX4FEbaZK0bpEc0mxBgTbIqtpuwCijg-10ArF&sig=AOD64_2v43_HH0J7cQXUmiqItSlGJMlj5Q&q&adurl&ved=2ahUKEwiT1eXm87_4AhXQilYBHSjCD6sQ0Qx6BAgDEAEGoogle Cloud - Google Cloud Platform(GCP)

その後、下記の画面の赤線部にある「無料で~~」の項目どちらかをクリックしてください。

各項目を入力

以下の「国」、「お客様の~~」の項目に適当なものを選び、「利用規約」ともし希望なら「最新情報をメールで通知」のチェックボックスをクリックしてください。その後、画面左下の「続行」をクリック。

また、画面右手にはクレジットカードを登録をしても勝手に有料になるわけではないという説明があります。

IDと連絡先の確認

確認後、画面左下の「続行」をクリック。

支払い情報の入力

アカウントの種類に適当なものを選択。その後、「お支払い方法」にクレジットカードの情報を入力し、画面下の「無料トライアルを開始」をクリック。

新規プロジェクト作成から秘密鍵作成まで

新規プロジェクト作成

step
1
赤線部クリック

(既にプロジェクトを作成したことがあるので初期画面が少し違っているかもしれません。)

step
2
新しいプロジェクトをクリック

step
3
任意のプロジェクト名を入力

場所は「組織無し」のデフォルトで構いません。その後「作成」をクリック。

各種APIを導入

GooleDriveAPIを検索

以下の赤線部の検索バーに「Google Drive API」と入力し、検索します。

GooleDriveAPIを選択

以下の赤線部の「Google Drive API」をクリック。

GooleDriveAPI有効化

赤線部をクリック。

GooleSheetsAPIを検索

検索バーに入力し、赤線部の「Goole Sheets API」をクリック。

GooleSheetsAPI有効化

秘密鍵の作成

サービスアカウント作成

左の赤線部「認証情報」選択後、「認証情報を作成」から右赤線部の「サービスアカウント」クリック。

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

「サービスアカウント名」に任意を名前を入力。その後、「サービスアカウントの説明」を入力するが、こちらは入力しなくても構いません。

続けて、「ロール」の項目に「オーナー」選択。そして、画面一番下の「完了」をクリック。

作成したサービスアカウントを選択

以下の赤線部をクリック。

「新しい鍵」を作成

「キー」選択後、「鍵を追加」から「新しい鍵を作成」をクリック。

JSON選択

「キーのタイプ」に「JSON」を選択し、作成をクリック。

.jsonファイルの保存

ファイルの保存場所を聞かれるので、任意のディレクトリを選択し、保存。

新規のGoole Spread Sheetを作成

既存のシートがある場合はこちらの工程はスキップしてください。

今回は新たに作成します。

GooleSpreadSheetエディタにアクセス

以下のリンクをクリックし、画像の「スプレットシートに移動」を選択してください。

Google Sheets: オンライン スプレッドシート エディタ

空白(新規シート)を選択

スプレッドシートの共有にアカウント追加

先で作成した.jsonファイルの中身を確認し、アカウントをコピー

以下の内「"client_email"」の右側のアドレスをコピーしておく。

シートの共有を操作

赤線部の「共有」クリック。

アカウントの追加

以下の「ユーザーやグループを追加」に先ほどコピーした「"client_email"」の右側のアドレスをペーストし、「完了」をクリック。

アカウントを再確認

再確認し、「送信」選択。

これで、スプレッドシートをPythonで操作する準備はできました。

Pythonのgspreadライブラリでシートを操作

前提として「gspead」のライブラリが入っていない際は、pipを使用しインストールを行ってください。

また、本サンプルコードでは「datetime」のライブラリも使用しています。

サンプルコード

以下はシートへの読み書きを行うサンプルプログラムです。

このサンプルは"日付"という文字列と現在時刻をシートに出力し、その後print文でそのシートの内容を画面にも出力しています。

XXXXXXXXXXXXXXXXX.jsonには保存した.jsonファイルの名前をYYYYYYYYYYYYYYYYYYYには作成したもしくは既存のスプレッドシートのタイトルを入力してください。

import gspread
import datetime

def to_sheetapi():
    # サービスアカウントキーファイルの読み込み
    gspread_client = gspread.service_account(filename="./XXXXXXXXXXXXXXXXX.json")
    # Google スプレッドシートを開く
    spread_sheet = gspread_client.open(YYYYYYYYYYYYYYYYYYY)
    ws1 = spread_sheet.get_worksheet(0) #1つ目のシート指定
    #spread_sheetオブジェクトのsheet1の中身をすべてクリア
    ws1.clear()
    #日付書き込み

    now = str(datetime.datetime.now())#現在の時間を取得
    rn_now = now[:now.find('.')]#'.'を含む文字列以降を削除
    timelist = ['日付', rn_now]
    #リスト型で書き込む方法
    ws1.append_row(timelist)
    
    #シートの中身を全てをリストで取得し、出力
    print(ws1.get_all_values())
    
if __name__ == '__main__':     
    to_sheetapi()

実行結果

以下は実行結果です。

上部の赤線部はスプレッドシートのタイトルです。

無事、下部の赤線部のA1セルに"日付"とB1セルに現在時刻が出力されており、下の画像の出力(print文の出力)画面にもその二つが出ています。

終わりに

ご視聴ありがとうございました。

GCPの登録方法からSpreadSheetの作成やアカウントの共有までは丁寧に解説したつもりですが、最後のgspreadの内容に関しては1つのサンプルでしか説明しておりません。この記事に関して、gspreadの操作等の質問があれば改めて解説します。