Ok, habe ich endlich Batch-Anfrage verwendet. Die Idee besteht darin, mehrere Änderungen in einer API-Anfrage zu senden.
Zuerst habe ich eine Liste von Wörterbüchern erstellt, die wie rows_map[R][C]
verwendet werden, um den Wert der Zelle in Zeile R
und Spalte C
zu erhalten.
rows_map = [
{
1: row['first_column']
2: row['second']
3: row['and_last']
}
for row i rows
]
Dann bekomme ich alle Zellen aus dem Arbeitsblatt
query = gdata.spreadsheet.service.CellQuery()
query.return_empty = 'true'
cells = _api_client.GetCellsFeed(self._key, wksht_id=self._raw_events_worksheet_id, query=query)
und Batch-Anfrage erstellen, um mehrere Zellen zu einem Zeitpunkt zu ändern.
Dann kann ich die Tabelle ändern (oder in meinem Fall alle Werte neu schreiben).
for cell_entry in cells.entry:
row = int(cell_entry.cell.row) - 2
col = int(cell_entry.cell.col)
if 0 <= row < len(events_map):
cell_entry.cell.inputValue = rows_map[row][col]
else:
cell_entry.cell.inputValue = ''
batch_request.AddUpdate(cell_entry)
Und nur eine Anfrage in alle Änderungen an:
_api_client.ExecuteBatch(batch_request, cells.GetBatchLink().href)
NOTES:
Batch Anfrage sind nur mit Handy-Abfragen. Es gibt keinen solchen Mechanismus, der mit Listenabfragen verwendet werden kann.
query.return_empty = 'true'
ist obligatorisch. Andernfalls gibt API nur Zellen zurück, die nicht leer sind.
Die API hat eine "Batch-Update", ich habe es mit Java verwendet, aber nicht auf die Python-Version. – eddyparkinson