我正在尝试使用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
因此基本上,出于要求(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
答案 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 行