Cyr*_*ris 1 ruby google-sheets-api
我正在尝试使用 Ruby API 更新 Google Sheet(这只是 SheetsV4 API 的包装器)
我遇到以下错误
Google::Apis::ClientError: badRequest: Range ('MySheet'!AA1) 超出网格限制。最大行数:1000,最大列数:26
我在 google 论坛上找到了这个问题的参考资料,但是除了使用不同的方法写入电子表格之外,似乎没有解决该问题的方法。
问题是,我需要复制现有的电子表格模板,并在各种工作表中输入我的原始数据。到目前为止,我一直在使用此代码(serviceRuby 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
Run Code Online (Sandbox Code Playgroud)
到目前为止,它运行得很好,但是在向我的提取物中添加了更多数据之后,我浏览了第 26 列(AA向前的列),现在出现错误。
是否有一些选项可以传递给update_spreadsheet_value我们可以提高这个限制?
否则,使用 append 写入电子表格的另一种方法是什么?
编辑 - 对我的场景的清晰描述
我有一个包含 8 个工作表(标签)的模板 Google 电子表格,其中 4 个有标题RAW-XX,这是我尝试更新数据的地方。
一开始,这些原始选项卡只有 30 列的标题(A1 --> AD1)我的代码需要能够填充所有单元格 A2 --> AD42
所以基本上我正在考虑使用update_spreadsheet_value而不是append_xx因为要求(2)。但是由于 API 中的这个错误/限制(不清楚),这不起作用。同样重要的是要注意:我实际上并没有一次性更新所有这 30 列,而是实际上在多次调用该update方法时(每次最多 10 列)
我想过 - 也许我错过了发送到 Google API 以允许一次超过 26 列的选项?- 也许这实际上是updateAPI 的一个未公开的硬限制- 也许我可以诉诸于删除现有数据 + 使用 append
编辑 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
Run Code Online (Sandbox Code Playgroud)
现在我“第一次”调用我的应用程序,这会将现有模板复制到一个新文件“generated_spreadsheet”并在 RAW 表中注入数据。事实证明,此时,我的应用程序说有 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
Run Code Online (Sandbox Code Playgroud)
也许如果我稍后调用我的应用程序,也许模板和数据之间发生了变化,所以我想替换我的“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
Run Code Online (Sandbox Code Playgroud)
假设现在我的应用程序说还有 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
Run Code Online (Sandbox Code Playgroud)
使用 values.append 怎么样?在我的环境中,我也遇到过和你一样的情况。为了避免这个问题,我使用了 values.append。
请修改如下再试。
service.update_spreadsheet_value(
Run Code Online (Sandbox Code Playgroud)
service.append_spreadsheet_value(
Run Code Online (Sandbox Code Playgroud)
如果这不是您想要的结果,我很抱歉。