我正在尝试使用 Ruby API(它只是 SheetsV4 API 的包装器)更新 Google 表格
我遇到了以下错误
Google::Apis::ClientError: badRequest: Range ('MySheet'!AA1) exceeds grid limits. Max rows: 1000, max columns: 26
我找到了这个问题的引用资料 on the google forum ,但是除了使用不同的方法写入电子表格之外,似乎没有解决问题的方法。
问题是,我需要复制一个现有的电子表格模板,并在各种工作表中输入我的原始数据。到目前为止,我一直在使用这段代码(其中 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
以便我们提高这个限制?
否则,使用 append 写入电子表格的另一种方法是什么?
编辑 - 对我的场景的清晰描述
我有一个包含 8 个工作表(选项卡)的 Google 电子表格模板,其中 4 个标题为 RAW-XX
,这是我尝试更新数据的地方。
一开始,那些原始标签只有 30 列标题 (A1 --> AD1) 我的代码需要能够填充所有单元格 A2 --> AD42
- (1) 第一次
- (2) 并且我的代码需要能够再次重新运行以用新值替换这些值,而无需附加
基本上,由于要求 (2),我正在考虑使用 update_spreadsheet_value
而不是 append_xx
。但是由于 API 中的这个错误/限制(不清楚),这是行不通的。同样重要的是要注意:我实际上并不是一次更新所有这 30 列,而是多次调用 update
方法(每次最多 10 列)
我是这么想的
- 也许我缺少发送到 Google API 的选项以允许一次超过 26 列?
- 也许这实际上是 update
API 的一个未记录的硬限制
- 也许我可以求助于删除现有数据 + 使用追加
编辑 2
假设我有一个包含多个工作表的版本 1 模板(请注意,我使用 =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
现在我“第一次”调用我的应用程序,这会将现有模板复制到新文件“generated_spreadsheet”并在 RAW 表中注入(inject)数据。结果此时,我的应用程序说有 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(
引用:
如果这不是你想要的结果,我很抱歉。
关于ruby - Google Spreadsheet API 返回网格限制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53614276/