返回网格限制错误的 Google 电子表格 API

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

  • (1) 第一次
  • (2) 并且我的代码需要能够再次重新运行以用新的值替换这些值,而无需附加

所以基本上我正在考虑使用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)

Tan*_*ike 6

使用 values.append 怎么样?在我的环境中,我也遇到过和你一样的情况。为了避免这个问题,我使用了 values.append。

请修改如下再试。

从:

service.update_spreadsheet_value(
Run Code Online (Sandbox Code Playgroud)

到:

service.append_spreadsheet_value(
Run Code Online (Sandbox Code Playgroud)

参考:

如果这不是您想要的结果,我很抱歉。