リスト内の辞書の値を入力したいスプレッドシートがあります。セルごとに更新する for ループを作成しましたが、遅すぎて gspread.httpsession.HTTPError が頻繁に発生します。行ごとに更新するループを作成しようとしています。それは私が持っているものです:
lstdic=[
{'Amount': 583.33, 'Notes': '', 'Name': 'Jone', 'isTrue': False,},
{'Amount': 58.4, 'Notes': '', 'Name': 'Kit', 'isTrue': False,},
{'Amount': 1083.27, 'Notes': 'Nothing', 'Name': 'Jordan', 'isTrue': True,}
]
これが私のセルバイセルループです:
headers = wks.row_values(1)
for k in range(len(lstdic)):
for key in headers:
cell = wks.find(key)
cell_value = lstdic[k][key]
wks.update_cell(cell.row + 1 + k, cell.col, cell_value)
それが行うことは、辞書のリスト内のキーに対応するヘッダーを見つけ、その下のセルを更新することです。次の繰り返しでは、行が 1 つ増えるため、同じ列のセルを次の行で更新します。これは遅すぎるので、行単位で更新したいと考えています。私の試み:
headers = wks.row_values(1)
row=2
for k in range(len(lsdic)):
cell_list=wks.range('B%s:AA%s' % (row,row))
for key in headers:
for cell in cell_list:
cell.value = lsdic[k][key]
row+=1
wks.update_cells(cell_list)
これは各行をすばやく更新しますが、値は同じです。したがって、3 番目のネストされた for ループは、各セルに同じ値を割り当てます。セルに正しい値を割り当てる方法を見つけようとして頭を悩ませています。助けていただければ幸いです。
PS ちなみに、Google スプレッドシートの値を特定の順序で表示する必要があるため、ヘッダーを使用しています。