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

所以基本上我是考虑使用 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 行