Как выполнить запись таблицы через 1 ячейку одним запросом?
Каким образом, из массива данных, можно записывать в ячейки каждый второй элемент с отступом через 1 ячейку? Т.е. в С10 - info1, следующая ячейка пропускается, в E10 - info2, пропуск, G10 - info3, пропуск, I10 - info4.
import gspread
item_list = [['data1', 'info1'],['data2', 'info2'],['data3', 'info3'],['data4', 'info4']]
gc = gspread.service_account(filename='credentials.json')
wks = gc.open("table").sheet1
cell_list = wks.range('C10:I10')
for i, cell in cell_list:
cell.value = item_list[i][1]
wks.update_cells(cell_list)
Ответы (1 шт):
Если я вас правильно понял, то можно сделать так:
item_list = [['data1', 'info1'],['data2', 'info2'],['data3', 'info3'],['data4', 'info4'],['data3', 'info5'],['data4', 'info6'],['data3', 'info7'],['data4', 'info8'],['data1', 'info9'],['data2', 'info10'],['data3', 'info11'],['data4', 'info12'],['data3', 'info13'],['data4', 'info14'],['data3', 'info15'],['data4', 'info16'],['data4', 'info17']]
cell=[]
for i in range(0,17):
if i % 2:
cell.append(item_list[i][1])
print(cell)
Вывод консоли:
['info2', 'info4', 'info6', 'info8', 'info10', 'info12', 'info14', 'info16']
[Program finished]
Идея в чем: если полученный [индекс] делится на 2 без остатка, то мы запишем данные только с четными индексами(каждый второй).
Или можем использовать: if not i % 2:
['info1', 'info3', 'info5', 'info7', 'info9', 'info11', 'info13', 'info15', 'info17']
[Program finished]
Соответственно теперь мы получим True в условии только для нечетных [индексов]
Дополнение:
import string
item_list = [['data1', 'info1'], ['data2', 'info2'], ['data3', 'info3'], ['data4', 'info4']]
cell_range = string.ascii_uppercase[2:9] # Получаем строку "CDEFGHI"
item_index = 0
for index, cell in enumerate(cell_range):
if index % 2: # if not index % 2:
value = item_list[item_index][1]
print(f'{cell}10 - {value}')
item_index += 1
D10 - info1 F10 - info2 H10 - info3
[Program finished]
if not index % 2:
C10 - info1 E10 - info2 G10 - info3 I10 - info4
[Program finished]
Также, можно сразу сделать срез с шагом 2:
import string
item_list = [['data1', 'info1'], ['data2', 'info2'], ['data3', 'info3'], ['data4', 'info4']]
cell_range = string.ascii_uppercase[2:9:2] # Получаем строку "CEGI"
for index, cell in enumerate(cell_range):
value = item_list[index][1]
print(f'{cell}10 - {value}')
C10 - info1 E10 - info2 G10 - info3 I10 - info4
[Program finished]
В контексте вашей задачи:
wks = gc.open("table").sheet1
cell_list = wks.range('C10:I10')[::2]