Google 电子表格 API 返回网格限制错误
Google Spreadsheet API returning grid limits error
我正在尝试使用 Ruby API 更新 Google Sheet(这只是 SheetsV4 API)
我运行出现以下错误
Google::Apis::ClientError: badRequest: Range ('MySheet'!AA1) exceeds grid limits. Max rows: 1000, max columns: 26
我找到了这个问题的参考资料on the google forum,但是除了使用不同的方法写入传播之外,似乎没有解决问题的方法sheet。
问题是,我需要复制现有的传播sheet 模板,并在各种 sheet 中输入我的原始数据。到目前为止,我一直在使用此代码(其中 service
是 Ruby SheetsV4 API 的客户端)
def write_table(values, sheet: 'Sheet1', column: 1, row: 1, range: nil, value_input_option: 'RAW')
google_range = begin
if range
"#{sheet}!#{range}"
elsif column && row
"#{sheet}!#{integer_to_A1_notation(column)}#{row}"
end
end
value_range_object = ::Google::Apis::SheetsV4::ValueRange.new(
range: google_range, values: values
)
service.update_spreadsheet_value(spreadsheet_id,
google_range,
value_range_object,
value_input_option: value_input_option
)
end
到目前为止它运行良好,但在向我的摘录中添加更多数据后,我浏览了第 26 列(从 AA
列开始),现在出现错误。
是否有一些选项可以传递给 update_spreadsheet_value
以便我们可以提高此限制?
否则,使用追加写入传播sheet的另一种方法是什么?
编辑 - 对我的场景的清晰描述
我有一个模板 Google spreadsheet,带有 8 个 sheets(制表符),其中 4 个标题为 RAW-XX
,这是我尝试更新的地方我的数据。
一开始,那些原始标签只有 headers 30 列 (A1 --> AD1)
我的代码需要能够填充所有单元格 A2 --> AD42
- (1) 第一次
- (2) 并且我的代码需要能够再次 re-run 以用新值替换这些值,而无需附加
所以基本上我是考虑使用 update_spreadsheet_value
而不是 append_xx
因为要求 (2)。但是由于 bug/limitation(不清楚)在 API 中,这是行不通的。同样重要的是要注意:我实际上并没有一次更新所有这 30 列,而是实际上多次调用 update
方法(每次最多 10 列)
我认为
- 也许我缺少发送到 Google API 的选项以允许一次超过 26 列?
- 也许这实际上是 update
API 的一个未记录的硬限制
- 也许我可以求助于删除现有数据 + 使用 append
编辑 2
假设我有一个版本 1 的模板,其中包含多个 sheet(请注意,我使用 =xx
表示公式,使用 [empty]
表示公式中没有任何内容单元格,1
表示提供了原始值“1”
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
[empty] | [empty] |
Sheet2 - FORMATTED
Number of foos | Number of Bars
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'B2
现在我调用我的应用程序 "for the first time",这会将现有模板复制到新文件 "generated_spreadsheet" 并在 RAW sheet 中注入数据。结果此时,我的应用程序说有 1 个 foo 和 0 个 bar
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
1 | 0 |
Sheet2 - FORMATTED
Number of foos | Number of Bars
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2
也许如果我稍后调用我的应用程序,模板和数据之间可能发生了变化,所以我想替换 "generated_spreadsheet"
中的所有内容
新模板已成为介于两者之间
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
[empty] | [empty] |
Sheet2 - FORMATTED
Number of foos | Number of Bars | All items
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2 | =A2 + B2
假设现在我的应用程序显示仍然有 1 个 foo,并且条数从 0 变为 2,我想更新 "generated_spreadsheet" 使其看起来像
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
1 | 3 |
Sheet2 - FORMATTED
Number of foos | Number of Bars | All items
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2 | =A2 + B2
使用 values.append 怎么样?在我的环境中,我也遇到了与您相同的情况。为了避免这个问题,我使用了 values.append.
请修改如下,然后重试
发件人:
service.update_spreadsheet_value(
收件人:
service.append_spreadsheet_value(
参考:
如果这不是您想要的结果,我很抱歉。
这是因为超出范围。
AA1 表示列是 AA,也表示 27,所以这个起点 AA1 不存在,这就是你遇到这个错误的原因。
你可以试试Z1,这个应该可以的
当我没有空列时,我也遇到过这种情况(我从电子表格中删除了所有空列)。我只是在最后一列旁边添加了一个空的,它就起作用了。
worksheet.resize(2000)
将调整您的 sheet 2000 行
我正在尝试使用 Ruby API 更新 Google Sheet(这只是 SheetsV4 API)
我运行出现以下错误
Google::Apis::ClientError: badRequest: Range ('MySheet'!AA1) exceeds grid limits. Max rows: 1000, max columns: 26
我找到了这个问题的参考资料on the google forum,但是除了使用不同的方法写入传播之外,似乎没有解决问题的方法sheet。
问题是,我需要复制现有的传播sheet 模板,并在各种 sheet 中输入我的原始数据。到目前为止,我一直在使用此代码(其中 service
是 Ruby SheetsV4 API 的客户端)
def write_table(values, sheet: 'Sheet1', column: 1, row: 1, range: nil, value_input_option: 'RAW')
google_range = begin
if range
"#{sheet}!#{range}"
elsif column && row
"#{sheet}!#{integer_to_A1_notation(column)}#{row}"
end
end
value_range_object = ::Google::Apis::SheetsV4::ValueRange.new(
range: google_range, values: values
)
service.update_spreadsheet_value(spreadsheet_id,
google_range,
value_range_object,
value_input_option: value_input_option
)
end
到目前为止它运行良好,但在向我的摘录中添加更多数据后,我浏览了第 26 列(从 AA
列开始),现在出现错误。
是否有一些选项可以传递给 update_spreadsheet_value
以便我们可以提高此限制?
否则,使用追加写入传播sheet的另一种方法是什么?
编辑 - 对我的场景的清晰描述
我有一个模板 Google spreadsheet,带有 8 个 sheets(制表符),其中 4 个标题为 RAW-XX
,这是我尝试更新的地方我的数据。
一开始,那些原始标签只有 headers 30 列 (A1 --> AD1) 我的代码需要能够填充所有单元格 A2 --> AD42
- (1) 第一次
- (2) 并且我的代码需要能够再次 re-run 以用新值替换这些值,而无需附加
所以基本上我是考虑使用 update_spreadsheet_value
而不是 append_xx
因为要求 (2)。但是由于 bug/limitation(不清楚)在 API 中,这是行不通的。同样重要的是要注意:我实际上并没有一次更新所有这 30 列,而是实际上多次调用 update
方法(每次最多 10 列)
我认为
- 也许我缺少发送到 Google API 的选项以允许一次超过 26 列?
- 也许这实际上是 update
API 的一个未记录的硬限制
- 也许我可以求助于删除现有数据 + 使用 append
编辑 2
假设我有一个版本 1 的模板,其中包含多个 sheet(请注意,我使用 =xx
表示公式,使用 [empty]
表示公式中没有任何内容单元格,1
表示提供了原始值“1”
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
[empty] | [empty] |
Sheet2 - FORMATTED
Number of foos | Number of Bars
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'B2
现在我调用我的应用程序 "for the first time",这会将现有模板复制到新文件 "generated_spreadsheet" 并在 RAW sheet 中注入数据。结果此时,我的应用程序说有 1 个 foo 和 0 个 bar
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
1 | 0 |
Sheet2 - FORMATTED
Number of foos | Number of Bars
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2
也许如果我稍后调用我的应用程序,模板和数据之间可能发生了变化,所以我想替换 "generated_spreadsheet"
中的所有内容新模板已成为介于两者之间
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
[empty] | [empty] |
Sheet2 - FORMATTED
Number of foos | Number of Bars | All items
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2 | =A2 + B2
假设现在我的应用程序显示仍然有 1 个 foo,并且条数从 0 变为 2,我想更新 "generated_spreadsheet" 使其看起来像
Sheet1 - RAW
RAW Number of foos | RAW Number of Bars |
1 | 3 |
Sheet2 - FORMATTED
Number of foos | Number of Bars | All items
='Sheet1 - RAW'!A2 | ='Sheet1 - RAW'!B2 | =A2 + B2
使用 values.append 怎么样?在我的环境中,我也遇到了与您相同的情况。为了避免这个问题,我使用了 values.append.
请修改如下,然后重试
发件人:
service.update_spreadsheet_value(
收件人:
service.append_spreadsheet_value(
参考:
如果这不是您想要的结果,我很抱歉。
这是因为超出范围。
AA1 表示列是 AA,也表示 27,所以这个起点 AA1 不存在,这就是你遇到这个错误的原因。
你可以试试Z1,这个应该可以的
当我没有空列时,我也遇到过这种情况(我从电子表格中删除了所有空列)。我只是在最后一列旁边添加了一个空的,它就起作用了。
worksheet.resize(2000)
将调整您的 sheet 2000 行