Nano Hash - криптовалюты, майнинг, программирование

Код ошибки gspread 400 Диапазон ("имя"!имя) превышает пределы сетки

Я использую Python 2.7 на Raspberry Pi с версией 3.0.0 gspread.

Когда я использую функцию gspread get_all_values(), я получаю следующую ошибку:

File "/home/pi/DB/GSheets/GoogleSheets.py", line 121, in GetAll
    listOfLists = googleSheetName.worksheet(GSTabName).get_all_values()
  File "/home/pi/.local/lib/python2.7/site-packages/gspread/models.py", line 444, in get_all_values
    data = self.spreadsheet.values_get(self.title)
  File "/home/pi/.local/lib/python2.7/site-packages/gspread/models.py", line 110, in values_get
    r = self.client.request('get', url, params=params)
  File "/home/pi/.local/lib/python2.7/site-packages/gspread/client.py", line 79, in request
    raise APIError(response)
gspread.exceptions.APIError: {
  "error": {
    "code": 400,
    "message": "Range ('name'!name) exceeds grid limits. Max rows: 52, max columns: 17",
    "status": "INVALID_ARGUMENT"
  }
}

Эта проблема не возникала у меня в предыдущей версии gspread. Текущая версия, ранее известная как «v4», похоже, представила это. Насколько я могу судить, функция get_all_values ​​не изменилась между двумя версиями. Кто-нибудь знает, что может быть причиной этого внезапно?

Заранее спасибо!

РЕДАКТИРОВАТЬ:
«имя» используется в качестве заполнителя для имени рабочего листа.

EDIT2:
Примечание. Я подключил проект к совершенно новому листу Google с идентичными рабочими листами (и именами), и ошибка все еще возникает. Все имена рабочих листов являются буквенно-цифровыми и не содержат пробелов или специальных символов.

EDIT3:
Название вкладки, на которой он застревает, имеет форму «ABC1», но это первая вкладка, которая читается.

После изменения его на «SheetA» if response.ok: в client.py завершается успешно 4 раза, а затем происходит сбой MySQLdb из-за синтаксической ошибки SQL в его собственных файлах дистрибутива (вероятно, вызванной неправильными данными, используемыми для построения команды ). Прежде чем изменить имя вкладки на «SheetA», response.ok завершится успешно 3 раза, а затем завершится ошибкой. Когда я заставляю исключение не создаваться, отправленные данные (список списков, содержащих значения рабочего листа) ничем не отличаются от того, что отправляется, когда исключение не запускается.

Фактический размер рабочего листа составляет 52 x 17 (строки x столбцы). Размеры в APIError всегда соответствуют размерам рабочего листа.

EDIT4:
Это было обнаружено: следующие форматы имен рабочих листов (вкладок) вызывают APIError (код 400): «ABC1», «ABC123», однако «ABCD123» или «ABC1D» работают. Я также заметил, что когда я перемещаю рабочий лист/вкладку с допустимым именем (называется FirstSheet ниже) перед рабочим листом с недопустимым именем, возникает ошибка, включающая FirstSheet имя вроде этого: read.exceptions.APIError: { "error": { "code": 400, "message": "Range (FirstSheet!ABC123) exceeds grid limits. Max rows: 132, max columns: 17", "status": "INVALID_ARGUMENT" }, но только при сбое с недопустимым именем. Предыдущие действительные рабочие листы читаются без проблем. Все листы разного размера.


  • Не могли бы вы поделиться названием рабочего листа, из которого вы получаете значения? 15.04.2018
  • Это не для личного проекта, поэтому я не хочу в данный момент. Зачем нужно имя рабочего листа? 16.04.2018
  • Кстати, спасибо за внимание к этому. Я надеюсь, что нынешние ограничения, о которых я упомянул, не помешают вам помочь мне. 16.04.2018
  • @Burnash Я обновил вопрос, чтобы показать свои последние усилия. Предыдущее имя листа (не рабочий лист/вкладка) было в форме базы данных ABCD1, а новое — XYZ_Proxy. Я понимаю, что это не совсем относится к проблеме, но это нужно было сделать в любом случае. Однако это показывает мне, что имя листа Google не было причиной, и я чувствую, что имена рабочих листов/вкладок также не должны вызывать никаких проблем. Еще раз, я очень ценю ваше внимание к моему вопросу и хотел бы обсудить его подробнее. 16.04.2018
  • Я не могу воспроизвести эту проблему, и, поскольку имя рабочего листа (вкладки) используется в ошибочной строке кода (например, data = self.spreadsheet.values_get(self.title)), мое первое предположение заключалось в том, что с ним что-то не так. Очень сложно отследить проблему, когда у вас есть только частичное представление о контексте. Можете ли вы хотя бы издеваться над именем рабочего листа/вкладки, как вы это делали с именем электронной таблицы? Есть ли в этом что-то подозрительное? Попробуйте переименовать его в SheetA и посмотрите, исчезнет ли проблема. Кроме того, можете ли вы поделиться фактическими размерами рабочего листа? 16.04.2018
  • @Burnash Спасибо за ваш ответ. Я обновил свой вопрос, чтобы показать результаты. Я хотел бы отметить, что в моем файле client.py он импортирует V2 из .urls, а не V4. Не знаю, имеет это значение или нет. Кроме того, на предыдущем Pi я работал над своей установкой gspread, у меня была папка v4, которую __init__.py использовал для клиента, и я смог решить проблему, с которой я сейчас сталкиваюсь, изменив ее на класс клиента (в client.py), найденный снаружи v4. Релиз этого Pi отличается, поэтому я не смог использовать это решение. Кажется, что-то изменилось в gspread 16.04.2018
  • Я попытался изменить порядок вкладок, и кажется, что эта проблема возникает только для этой конкретной вкладки (хотя кажется, что неверные данные отправляются, когда исключение не выдается). 16.04.2018
  • Кстати, когда я заставляю исключение не создаваться, отправленные данные (список списков, содержащих значения рабочего листа) ничем не отличаются от того, что отправляется, когда исключение не срабатывает. 16.04.2018
  • @Burnash Это было обнаружено: следующие форматы имен рабочих листов (вкладок) вызывают APIError (код 400): ABC1, ABC123, однако ABCD123 или ABC1D работают. Я заметил, что когда я перемещаю рабочий лист/вкладку, которая является действительной (называется FirstSheet ниже), выдается ошибка, включающая имя FirstSheet, например: read.exceptions.APIError: { "error": { "code": 400, "message": "Range (FirstSheet!ABC123) exceeds grid limits. Max rows: 132, max columns: 17", "status": "INVALID_ARGUMENT" } Оба рабочих листа имеют разные размеры. 17.04.2018

Ответы:


1

У меня была такая же проблема, хотя мой код был на рубине. Подчеркивания не работали.

Что происходит, так это то, что Google путается, когда имя файла заканчивается целым числом, например, имя вашего листа называется ABC123. Так что ABC123X работал бы нормально.

Чтобы исправить это, мне пришлось экранировать его, используя одинарные кавычки - FirstSheet!'ABC123'

Мой код выглядел примерно так:

service.get_spreadsheet(file_id, ranges: "'ABC123'")
06.01.2020
  • Чтобы предотвратить подобные ошибки, возьмите за привычку всегда заключать имена листов в одинарные кавычки. Итак, 'sheet1'!A2:C33 вместо sheet1!A2:C33 19.05.2020
  • Святая мольба, это заслуживает большего количества голосов. БЛАГОДАРЮ ВАС. 12.02.2021

  • 2

    Я не уверен, почему это работает, но обнаруженный мной обходной путь заключается в том, чтобы окружить имена рабочих листов символами подчеркивания (в Google Таблицах):

    _Worksheet1_

    28.11.2018

    3

    Я получил ту же ошибку при попытке добавить ячейки с помощью метода диапазона. Я обнаружил, что если на лист была добавлена ​​​​дополнительная пустая ячейка / столбец, этой ошибки не произошло.

    26.11.2018
  • Я также заметил, что если вы поместите символы подчеркивания _ до и после имени рабочего листа, например _Worksheet1_, ошибка не возникнет. У меня был это как ответ, но по какой-то причине за него проголосовали, поэтому я удалил его. 26.11.2018

  • 4

    У меня была та же проблема, и после попыток и попыток я понял, что пытаюсь обновить ячейку, которая не находится в диапазоне, содержащемся на листе (на листе были столбцы до тех пор, пока F и функция не вызывала столбец «P»). Вероятно, не все случаи из-за этого, но это было в моем случае, поэтому, возможно, кто-то придет сюда в поисках решения, и это может быть полезно.

    07.08.2019

    5

    В моем случае мне пришлось открыть файл Google Sheet и нажать кнопку «Добавить 1000 строк» ​​внизу листа, чтобы решить проблему.

    введите здесь описание изображения

    03.06.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..