#python #google-spreadsheet-api
#python #google-sheets-api
Вопрос:
С помощью этого кода я обновил несколько строк в электронной таблице Google. Запрос проходит успешно и возвращает мне приведенное updatedRange
ниже.
result = service.spreadsheets().values().append(
spreadsheetId=spreadsheetId,
range=rangeName,
valueInputOption="RAW",
insertDataOption="INSERT_ROWS",
body=body
).execute()
print(result)
print("Range updated")
updateRange = result['updates']['updatedRange']
Теперь я хотел бы выполнить batchUpdate
запрос, чтобы установить форматирование или установить защищенный диапазон, но для этих API требуется диапазон, указанный как startRowIndex
, endRowIndex
и так далее.
Как я могу получить индекс строк из updatedRange
?
Комментарии:
1. Я не уверен, есть ли способ получить индексы строк / столбцов из
updatedRange
. Что я могу предложить, так это создать функцию, которая будет подсчитывать строки и столбцы на основеupdatedRange
значения. Как указано в документе : обновление электронных таблиц , «существует несколько разных способов достижения одного и того же результата». Но если вы чувствуете, что эта функция поможет, попробуйте подать ее здесь .
Ответ №1:
В ожидании собственного или лучшего ответа я опубликую функцию, которую я создал для перевода a namedRange
в a gridRange
. Функция далека от совершенства и не преобразует имя листа в идентификатор листа (я оставил эту задачу другой конкретной функции), но принимает именованные диапазоны в форме:
sheet!A:B
sheet!A1:B
sheet!A:B5
sheet!A1:B5
Вот код
import re
def namedRange2Grid(self, rangeName):
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
match = re.match(".*?!([A-Z0-9] ):([A-Z0-9] )", rangeName)
if match:
start = match.group(1)
end = match.group(2)
matchStart = re.match("([A-Z]{1,})([1-9] ){0,}", start)
matchEnd = re.match("([A-Z]{1,})([1-9] ){0,}", end)
if matchStart and matchEnd:
GridRange = {}
letterStart = matchStart.group(1)
letterEnd = matchEnd.group(1)
if matchStart.group(2):
numberStart = int(matchStart.group(2))
GridRange['startRowIndex'] = numberStart - 1
if matchEnd.group(2):
numberEnd = int(matchEnd.group(2))
GridRange['endRowIndex'] = numberEnd
i = 0
for l in range(0, len(letterStart)):
i = i (l * len(ascii_uppercase))
i = i ascii_uppercase.index(letterStart[l])
GridRange['startColumnIndex'] = i
i = 0
for l in range(0, len(letterEnd)):
i = i (l * len(ascii_uppercase))
i = i ascii_uppercase.index(letterEnd[l])
GridRange['endColumnIndex'] = i 1
return GridRange