Google Spreadsheet API返回网格限制错误

时间:2018-12-04 13:42:18

标签: ruby google-sheets-api

我正在尝试使用Ruby API(这只是SheetsV4 API的包装器)更新Google表格

我遇到以下错误

  

Google :: Apis :: ClientError:badRequest:范围('MySheet'!AA1)超出了网格限制。最大行数:1000,最大列数: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列(从{{1}列开始),现在我得到了错误。

是否有传递给AA的选项,所以我们可以提高此限制?

否则,使用append写入电子表格的另一种方式是什么?

编辑-我的情况的清晰描述

我有一个包含8个工作表(标签)的模板Google电子表格,其中有4个标题为update_spreadsheet_value,这是我尝试更新数据的地方。

一开始,这些原始标签仅在30列上包含标题(A1-> AD1) 我的代码需要能够填充所有单元格A2-> AD42

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

因此基本上,出于要求(2),我考虑使用RAW-XX而不是update_spreadsheet_value。但是由于API中存在此错误/限制(不清楚),因此无法正常工作。同样重要的一点是:我实际上并不是一次更新所有30列,而是实际上多次调用append_xx方法(每次最多10列)

我以为 -也许我错过了发送到Google API的选项,允许一次执行超过26列? -也许这实际上是update API的未记录的硬限制 -也许我可以诉诸于删除现有数据+使用append

编辑2

假设我有一个版本1的模板,其中有多个工作表(请注意,我使用update表示公式,使用=xx表示单元格中没有内容,而{{1} }表示已提供原始值“ 1”

[empty]

现在,我将我的应用程序称为“第一次”,它将现有模板复制到新文件“ generated_spreadsheet”中,并将数据注入RAW表中。原来,我的应用程序显示有1个foo和0个bar

1

也许以后我调用我的应用程序时,也许模板和数据在这两者之间发生了变化,所以我想替换“ generate_spreadsheet”中的所有内容

新模板介于两者之间

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

假设现在我的应用程序说仍然有1个foo,并且条数从0变为2,我想更新“ generated_spreadsheet”,以便它看起来像

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

4 个答案:

答案 0 :(得分:2)

如何使用values.append?在我的环境中,我也遇到过同样的情况。为了避免此问题,我使用了values.append。

请进行以下修改,然后重试。

发件人:

service.update_spreadsheet_value(

收件人:

service.append_spreadsheet_value(

参考:

如果这不是您想要的结果,对不起。

答案 1 :(得分:2)

这是因为超出范围。

AA1表示列为AA,也表示27,因此该起点AA1不存在,这就是您遇到此错误的原因。

您可以尝试Z1,应该没问题。

答案 2 :(得分:1)

当我没有空列时也发生了这种情况(我从电子表格中删除了所有空列)。我只是在最后一列旁边添加了一个空的,它可以工作。

答案 3 :(得分:0)

worksheet.resize(2000) 

会将您的工作表调整为 2000 行