python
pythonのgspreadで大量のデータを流し込みたい

はじめに

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行位のデータだったので、うん千データとか可能かはわからない