Googleドライブ側で下準備
pythonでGoogleドライブのフォルダ及びスプレッドシートを編集する場合、共有する必要があります。
ファイル右クリックで共有をクリックします。
pythonでGoogleドライブのフォルダ内にファイルを保存したり、スプレッドシートを作成して編集などをしたい場合は、そのフォルダを共有します。
特定のスプレッドシートしか読み書きしない場合はそのスプレッドシートを共有します。
GCPからダウンロードしてきたjsonファイルを開いてください。
pythonのプロジェクトフォルダ直下にあるはずです。
メモ帳やVSCodeなどで開いて大丈夫です。
"client_email": "~~~~~~~~~~~~~~~~@~~~~~~~~~~~~~~.iam.gserviceaccount.com"
↑この部分を探してください。
~~~~~~~~~~~~~~~~@~~~~~~~~~~~~~~.iam.gserviceaccount.com
の部分だけコピーします。
そしてGoogleドライブの方での共有のメールアドレスを打ち込むところにペーストします。
図のようにクリックし、送信を押します。
これで下準備はできました。
python側
必要なライブラリをインストール
pip install gspread oauth2client pydrive
import os
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
JSON_PATH = os.path.join(os.getcwd(), "jsonファイル名.json")
# GoogleドライブのURLからIDを取ってきます。
FOLDER_ID = "~~~~~~~~~~~~~~~~~~~~~"
# 対象フォルダのIDはhttps://drive.google.com/drive/u/0/folders/以下
SHEET_ID = "~~~~~~~~~~~~~~~~~~~~~"
# スプレッドシートの場合https://docs.google.com/spreadsheets/d/ここがID/edit#gid=0
class Gspread:
def __init__(self) -> None:
self.workbook: Spreadsheet
self.worksheet: Worksheet
self.drive: GoogleDrive
self.credentials: Any
self.set_gspread()
def set_gspread(self):
scope = [
"https://spreadsheets.google.com/feeds",
"https://www.googleapis.com/auth/drive",
]
self.credentials = ServiceAccountCredentials.from_json_keyfile_name(
JSON_PATH , scope
)
gauth = GoogleAuth()
gauth.credentials = self.credentials
self.drive = GoogleDrive(gauth)
# フォルダにファイルを保存してみる
def save_file(self) -> None:
f = self.drive.CreateFile({"parents": [{"id": FOLDER_ID}]})
f.SetContentFile("パスとファイル名")
# Googleドライブのフォルダに保存したファイルを命名
f["title"] = "ファイル名"
f.Upload()
# スプレッドシートを開く
def open_sheet_by_(self):
gc = gspread.authorize(self.credentials)
# スプレッドシートを開く
self.workbook = gc.open_by_key(SHEET_ID)
# ワークシート1シート目指定
self.worksheet = self.workbook.get_worksheet(0)
# 最終行に書き込み
def append_row(self) -> None:
test = ["test1", "test2", "test3"]
# value_input_option="USER_ENTERED"全て文字列として書き込みのを防止
self.worksheet.append_row(test, value_input_option="USER_ENTERED")
# セルに書き込み
def update_cell(self) -> None:
# update_cell(row, column, val)
self.worksheet.update_cell(1, 2, "test")
スプレッドシートは書き込みはもちろん、読み込みもできます。
他にもスプレッドシートのシートを追加したり、名前をつけたりいろいろ操作できるのでいろいろ調べてやってみましょう。
- スクレイピングしてきた画像URLをIMAGE関数で画像を貼り付けたりもできます。
こちらを参考に - 罫線書いたり、色変えたり、行及び列の幅も操作できます。
その場合はgspread_formattingというライブラリを使いましょう。
gspread_formatting公式