Python общий диапазон в формате 'A2: A', обозначение A1 - PullRequest
0 голосов
/ 08 февраля 2020

В общем, если я сделаю следующее

wks.range('D2:D13')

, я не получу ошибок.

Однако, если я хочу получить все строки в столбце 'D' из строки 2, используя нотацию A1, я получаю сообщение об ошибке:

wks.range('D2:D')

Ошибка:

raise IncorrectCellLabel(label)
gspread.exceptions.IncorrectCellLabel: D

Согласно справочному описанию API, Worksheet.range должен использовать нотацию A1 . То, что я пытаюсь сделать, кажется правильным в соответствии с документацией Google Sheets API .

Что здесь происходит? Gspread не поддерживает формат или я его неправильно использую?

1 Ответ

1 голос
/ 09 февраля 2020
  • Вы хотите получить значения, используя a1Notation D2:D, используя gspread с python.
  • На текущем этапе, когда запускается wks.range('D2:D'), появляется ошибка, которая отображается в вашем вопросе.
  • Вы хотите узнать причину этой ошибки.
  • Вы уже смогли получить и поместить значения для Google Spreadsheet с помощью API Sheets.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

Когда я подтвердил исходный скрипт range(), когда range() выполнить, было обнаружено, что значения извлекаются с data = self.spreadsheet.values_get(range_label). Таким образом, в этом случае можно использовать D2:D.

Но (last_row, last_column) = a1_to_rowcol(end) выполняется, возникает ошибка. Сценарий a1_to_rowcol() можно увидеть в здесь .

Когда a1_to_rowcol() подтверждено, D2 из D2:D возвращает значение из регулярного выражения CELL_ADDR_RE = re.compile(r'([A-Za-z]+)([1-9]\d*)'). Но D из D2:D не возвращает значение из регулярного выражения. Таким образом, запускается raise IncorrectCellLabel(label), а затем возникает такая ошибка.

Обходной путь:

Чтобы получить значения, используя a1Notation D2:D, как насчет следующего обходного пути? В этом обходном пути используется метод values_get(range, params=None). В этом случае D2:D можно использовать для извлечения значений из электронной таблицы.

Пример сценария:

client = gspread.authorize(credentials)
spreadsheetId = "###"  # Please set the Spreadsheet ID.
sh = client.open_by_key(spreadsheetId)
res = sh.values_get("Sheet1!D2:D")  # Please set the a1Notation.
print(res)  # or print(res['values'])
  • В этом случае значения ячеек D2:D включены лист Sheet1 извлекается.
  • Когда имя листа не используется, как res = sh.values_get("D2:D"), значения извлекаются из 1-й вкладки в электронной таблице.

Ссылки:

Если я неправильно понял ваш вопрос, и это не было Направление вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...