はじめに
pythonのgspreadで、Googleスプレッドシートを操作してるときに、大量のデータを入力したらエラーになった
大量のデータをfor文で一件ずつ入力してみた
データ自体は150行分位だったが、以下の様なエラーがでてしまった。
raise APIError(response)
gspread.exceptions.APIError: {
"error": {
"code": 429,
"message": "Quota exceeded for quota group 'WriteGroup' and limit 'Write requests per user per 100 seconds' of service 'sheets.googleapis.com' for consumer 'project_number:xxx'.",
"status": "RESOURCE_EXHAUSTED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developer console API key",
"url": "xxxxx"
}
]
}
]
}
}
どうやら、col_values()を使うと大量のデータはエラーを起こしてしまうようだ。まぁそらそうか
大量にデータを記述刷る場合は、range()とupdate_cells()を使用する。
以下の様なコードを書いた。
import gspread
#Googleスプレッドシートへのアクセス
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('xxxx.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open('スプレッドシート名').worksheet('シート名')
#テスト用のリスト100個値が入ってるものとする
test_list = ['1','2','3','4'・・・中略,'100']
#編集する範囲を指定、A1セルから、リストの要素数をカウントしたものを指定する
cell_list = wks.range('A1:A'+str(len(test_list)))
#cell_listにtest_listの値を流し込む
for i,cell in enumerate(cell_list):
cell.value = test_list[i]
#最後にupdate_cellsで流し込む
wks.update_cells(cell_list)
大量とはいったものの、150〜200行位のデータだったので、うん千データとか可能かはわからない