ruby - Google Spreadsheet API 返回网格限制错误

标签 ruby google-sheets-api

我正在尝试使用 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/

相关文章:

sql - rails/SQL : count the number of consecutive records having a specific status

ruby-on-rails - 使用 Rails 5 API 获取错误 OmniAuth::NoSessionError

json - 使用Google Sheets API

javascript - 如何从循环范围内计数

php - 谷歌表 API 4 : How to append to the end of the row

java - Google 电子表格更新列中的数据格式

ruby - 运行 Docker 时无法运行 ruby​​ 命令

sql - schema.rb 中的 LOWER 索引

ruby - class ClassName <::Other ClassName 在 Ruby 中做什么?

python - 如何在 gspread 中动态更新/插入 google 工作表的行和列?