【问题标题】:gspread error code 400 "Range ('name'!name) exceeds grid limits"gspread 错误代码 400“范围('名称'!名称)超出网格限制”
【发布时间】:2018-04-13 16:45:26
【问题描述】:

我在具有 3.0.0 版 gspread 的 Raspberry Pi 上使用 python 2.7。

当我使用 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 函数在两个版本之间没有变化。有谁知道是什么原因突然导致这种情况?

提前致谢!

编辑:
'name' 被用作工作表名称的占位符。

EDIT2:
注意:我已将该项目连接到具有相同工作表(和名称)的全新 Google 表格,但错误仍然存​​在。所有工作表名称都是字母数字,不包含空格或特殊字符。

EDIT3:
卡住的标签的名称是“ABC1”的形式,但这是第一个被读取的标签。

改成“SheetA”后,client.py中的if response.ok:成功了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" },但仅在以无效名称崩溃时。可以毫无问题地阅读以前的有效工作表。 工作表的大小各不相同。

【问题讨论】:

  • 能否分享您从中获取值的工作表的名称?
  • 这不是个人项目,所以暂时不太愿意。为什么需要工作表的名称?
  • 顺便说一句,感谢您对此的关注。我希望我提到的当前限制不会妨碍您为我提供帮助。
  • 我无法重现此问题,并且由于工作表(选项卡)的名称用于失败的代码行(例如data = self.spreadsheet.values_get(self.title)),我的第一个猜测是它可能有问题.当您只有部分上下文视图时,很难跟踪问题。您至少可以像使用电子表格名称一样模拟工作表/选项卡的名称吗?有什么可疑之处吗?尝试将其重命名为 SheetA 并查看问题是否消失。另外,你能分享一下工作表的实际尺寸吗?
  • @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" } 两个工作表的大小不同

标签: python-2.7 raspbian gspread


【解决方案1】:

我遇到了同样的问题,虽然我的代码是用 ruby​​ 编写的。下划线不起作用。

当文件名以整数结尾时,Google 会感到困惑,例如,您的工作表名称称为 ABC123。所以ABC123X 本来可以正常工作的。

要修复它,我必须使用单引号来转义它 - FirstSheet!'ABC123'

我的代码看起来像这样:

service.get_spreadsheet(file_id, ranges: "'ABC123'")

【讨论】:

  • 为防止出现此类错误,请养成使用单引号将工作表名称括起来的习惯。所以'sheet1'!A2:C33 而不是sheet1!A2:C33
  • 天哪,这值得更多的支持。谢谢。
【解决方案2】:

我不确定为什么会这样,但我发现的一种解决方法是用下划线将工作表名称括起来(在 Google 表格中):

_Worksheet1_

【讨论】:

    【解决方案3】:

    我在尝试通过 range 方法附加单元格时遇到了同样的错误。我发现如果在工作表中添加了一个额外的空单元格/列,则不会发生此错误。

    【讨论】:

    • 我还注意到,如果您在工作表名称之前和之后加上下划线_,就像_Worksheet1_ 这样的错误不会发生。我有它作为答案,但由于某种原因它被否决了,所以我删除了它。
    【解决方案4】:

    我遇到了同样的问题,在尝试并尝试之后意识到我正在尝试更新一个不在工作表中包含的范围内的单元格(工作表在 F 之前有列,并且一个函数正在调用“P”列)。 可能并非所有情况都是因为那个,但它是在我的,所以也许有人来这里寻找解决方案,这可能会有用。

    【讨论】:

      【解决方案5】:

      就我而言,我必须打开 Google 表格文件并点击表格底部的“添加 1000 行”按钮来解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-22
        • 1970-01-01
        • 2012-05-21
        • 2019-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多