5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonでGoogle Spread Sheet操作

Last updated at Posted at 2022-05-23

やること

  • Googleのスプレットシートからデータを読み取る
  • Googleのスプレットシートにデータを書き出す

前提

以前作成した下記の環境からスタート

インストール

flaskの下に2つ追加

gspread
oauth2client

pip install -r requirements.txtを実行

下準備

  1. GCP
    APIとサービス
    →認証情報
    → 認証情報を作成
    → サービスアカウント
    → 名前をつけて、続行
    → ロール「編集者」
    → 完了
    → 再度、作ったサービスアカウントをクリック
    → キーから鍵を追加
    → JSONで作成

  2. VSCode
    ダウンロードされたJSONをcredential.jsonとしてVSCodeに保管

  3. SpreadSheet
    credential.jsonの中に入っているclient_emailをspreadsheetの共有で追加する

読み取りコード

spreadsheet.pyを新たに作成

import gspread
from oauth2client.service_account import ServiceAccountCredentials

def get():
    scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
    credentials = ServiceAccountCredentials.from_json_keyfile_name("./credential.json",scope)
    client = gspread.authorize(credentials)
    sheet = client.open_by_key("スプレットシートのID").sheet1
    list = sheet.get_all_records()
    print(list) 

※スプレットシートのID = URLにあるxxxxxxxxxxの部分spreadsheets/d/xxxxxxxxxx

最後の行をprintにしているので、python3 app.pyを実行してデータを取得できているか確認
大丈夫そうであれば、printをreturnに変更する

app.py

from flask import Flask
import spreadsheet

app = Flask(__name__)

@app.route("/")
def test():
    spread = spreadsheet.get()
    print(spread)
    return "Hello World!"
if __name__ == "__main__":
    app.run(debug=False, host='0.0.0.0', port= 8080)

appの中でspreadsheetを実行することで関数をまとめる

追加記事:書き込みコード

scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
credentials = ServiceAccountCredentials.from_json_keyfile_name("./credential.json",scope)
client = gspread.authorize(credentials)
sheet = client.open_by_key("スプレットシートのID").sheet1

※読み取りと同じ上記が必要

1セルずつ更新

for i , value in enumerate(values):
    sheet.update_cell(i+1, 1, value)
  • for文で回して1つのセルに対して更新
  • update_cell(行数, 列数, 値)
  • enumerate()を使用して要素とインデックスを同時に取得 → iが使えるようになる!

範囲指定して一気に更新

data = [[1,2,3],[4,5,6],[7,8,9]]   

sheet.update('A1:C3', data)
  • 3行3列一気に更新
  • sheet.update(範囲 , 値)
  • 更新するデータは二重配列

最後に

  1. ターミナルでpython3 app.pyを実行
  2. 別のターミナルでcurl http://localhost:8080を実行
    → 別のターミナル側でHello World!が表示され、ターミナル側でデータが表示されればOK!!

書き込みも追加して更新しました!
書き込む方法は様々あるので、データ量なども加味して決めていければ良いかなと思います。
参考文献が非常に分かりやすかったので、この記事で分からなければ読んでみると良いです。

参考文献

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?