Ok, cuối cùng tôi đã sử dụng yêu cầu hàng loạt. Ý tưởng là gửi nhiều thay đổi trong một yêu cầu API.
Thứ nhất, tôi đã tạo danh sách từ điển, sẽ được sử dụng như rows_map[R][C]
để lấy giá trị của ô tại hàng R
và cột C
.
rows_map = [
{
1: row['first_column']
2: row['second']
3: row['and_last']
}
for row i rows
]
Sau đó, tôi nhận được tất cả các tế bào từ các bảng
query = gdata.spreadsheet.service.CellQuery()
query.return_empty = 'true'
cells = _api_client.GetCellsFeed(self._key, wksht_id=self._raw_events_worksheet_id, query=query)
Và tạo yêu cầu hàng loạt thay đổi nhiều ô cùng một lúc.
batch_request = gdata.spreadsheet.SpreadsheetsCellsFeed()
Sau đó tôi có thể sửa đổi (hoặc trong trường hợp của tôi viết lại tất cả các giá trị) bảng tính.
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)
Và gửi tất cả những thay đổi trong chỉ có một yêu cầu:
_api_client.ExecuteBatch(batch_request, cells.GetBatchLink().href)
GHI CHÚ:
yêu cầu hàng loạt có thể xảy ra chỉ với Queries di động. Không có cơ chế như vậy được sử dụng với các truy vấn danh sách.
query.return_empty = 'true'
là bắt buộc. Nếu không, API sẽ chỉ trả lại các ô không trống.
API có "cập nhật hàng loạt", tôi đã sử dụng nó với Java, nhưng không nhìn vào phiên bản python. – eddyparkinson