gspread
キーとか作るな
手元なら --scopes=https://www.googleapis.com/auth/spreadsheets は要る
code:auth.py
import google
import gspread
creds, _ = google.auth.default()
gs = gspread.authorize(creds)
シート選択
code:select.py
sheet_url = ''
spreadsheet = gs.open_by_url(sheet_url)
worksheet = spreadsheet.get_worksheet(0)
worksheet = spreadsheet.worksheet('Sheet1') # 名前で
worksheets = spreadsheet.worksheets() # 一覧
DataFrame をまるっと書き込む
code:dataframe.py
worksheet.update(data) # まるっと上書き
worksheet.append_rows(data) # 追記
# 式を含む入力を書きたい(≒ 入力をそのままユーザー入力としたい
from gspread.utils import ValueInputOption
worksheet.update(data, value_input_option=ValueInputOption.user_entered)
DataFrame にまるっと読み込む
df = pd.DataFrame(worksheet.get_all_values())
df = pd.DataFrame(worksheet.get_all_values()[start_row:-1]) # start_row 行目以降すべて
1行目固定
worksheet.freeze(row=1)
セルフォーマットよく使うもの
worksheet.format(range, format) もある
シート単位で呼ぶ必要ある
code:wrap.py
worksheet.batch_format(
[
# 1行目太字
{"range": "A1:1", "format": {"textFormat": {"bold": True}},
# 全部折り返し
{"range": "A:Z", "format": {"wrapStrategy": "WRAP"}},
# 全部上寄せ
{"range": "A:Z", "format": {"verticalAlignment": "TOP"}},
]
)
特定の列の幅を変える
セルフォーマットじゃない & spreadsheet に対してリクエスト
たとえば text カラムを 500px に
code:width.py
sh.batch_update(
{
"requests": [
{
"updateDimensionProperties": {
"range": {
"sheetId": worksheet.id,
"dimension": "COLUMNS",
"startIndex": df.columns.get_loc("text"),
"endIndex": df.columns.get_loc("text") + 1,
},
"properties": {"pixelSize": 500},
"fields": "pixelSize",
}
},
]
},
)