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

Ruby Google电子表格API返回网格限制错误,ruby,google-sheets-api,Ruby,Google Sheets Api,我正在尝试使用Ruby API更新Google工作表,Ruby API只是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

我正在尝试使用Ruby API更新Google工作表,Ruby API只是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
我遇到了以下错误

Google::API::ClientError:badRequest:Range'MySheet'!AA1超出电网限制。最大行数:1000,最大列数:26

我已经找到了这个问题的参考资料,但是除了使用不同的方法写入电子表格之外,似乎没有解决这个问题的方法

问题是,我需要复制一个现有的电子表格模板,并在不同的表格中输入我的原始数据。到目前为止,我一直在使用这段代码,其中服务是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列之后,现在我得到了错误

是否可以通过一些选项来更新\u电子表格\u值,以便我们可以提高此限制

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

编辑-我的场景的清晰描述

我有一个模板Google电子表格,有8个SheetStab,其中4个标题为RAW-XX,这是我尝试更新数据的地方

开始时,这些原始选项卡只有30列A1->AD1上的标题 我的代码需要能够填充所有单元格A2->AD42

第一次 2,我的代码需要能够重新运行,以用新值替换这些值,而无需追加 因此,基本上我考虑使用update_电子表格_值,而不是追加_xx,因为要求2。但由于API中不清楚此缺陷/限制,因此无法正常工作。同样重要的是要注意:我并不是一次更新所有30列,而是多次调用update方法,每次最多更新10列

我想 -也许我错过了一个发送到GoogleAPI的选项,可以一次性允许超过26列? -也许这实际上是更新API的一个未记录的硬限制 -也许我可以使用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
现在我第一次调用我的应用程序,它将现有的模板复制到一个新文件生成的电子表格中,并将数据注入原始工作表中。事实证明,在这一刻,我的应用程序说有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
也许如果我稍后调用我的应用程序,可能模板和数据在两者之间发生了更改,所以我想替换生成的电子表格中的所有内容

新模板已介于两者之间

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,我想更新生成的_电子表格,使其看起来像

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

请按如下所示进行修改,然后重试

发件人: 致: 参考:
如果这不是您想要的结果,我很抱歉。

使用values.append怎么样?在我的环境中,我也经历了与你相同的情况。为了避免这个问题,我使用values.append

请按如下所示进行修改,然后重试

发件人: 致: 参考:
如果这不是您想要的结果,我很抱歉。

这是因为超出范围

AA1表示列是AA,也表示27,所以这个起始点AA1不存在,这就是您遇到此错误的原因


您可以试试Z1,这应该可以。

这是因为超出范围

AA1表示列是AA,也表示27,所以这个起始点AA1不存在,这就是您遇到此错误的原因


你可以试试Z1,这应该没问题。

当我没有空栏时,我也从电子表格中删除了所有空栏。我只是在最后一列旁边添加了一个空列,它就起作用了。

当我没有空列时,我也从电子表格中删除了所有空列。我只是在最后一列旁边加了一个空的,它就可以工作了

worksheet.resize(2000) 
将调整工作表2000行的大小


将调整您的工作表2000行的大小

据我所知,append将在添加之前查找空行,但由于我使用的是模板,其中可能已经有一些数据,例如带有公式的列或示例数据。。。我将尝试看看我是否可以保持源代码表干净,并且很容易附加。否则,一个更好的解决方案可能需要在之前清理模板并附加所有数据(包括标题)?该模板很有用,因为还有其他工作表可以格式化我的用户输入的原始数据backend@CyrilDuchon Doris很抱歉给您带来不便。首先,为了正确理解,我想确认一下你的情况。在你的问题中,首先,这张纸有1000个r
ows和从A到Z的列。对于此工作表,使用values.update将列添加到AA时,会发生此类错误。您希望添加没有错误的列。我可以这样理解。如果我误解了你的情况,请告诉我。我想修改它。对不起,我原来的帖子缺少解释/一个清晰的例子。我的问题在于列的数量而不是行的数量。我正在尝试替换远少于1k的行,但一次替换超过26列,而26列的限制是导致崩溃的原因。当我打开GoogleSpreadsheet模板时,我看到我已经添加了不止一列,所以问题似乎真的来自update_spreadsheet_value方法,我需要使用该方法,因为我可能需要替换现有数据。但我将在我的报告中添加一个明确的例子post@Cyril多丽丝:谢谢你的回复。我能问一下你的情况吗?1.是否要将模板工作表复制到新电子表格中的工作表?2.1和2的区别是什么?第一次是什么?不幸的是,我还无法从您的附加信息中看到您想要做什么。我想这是因为我的英语能力差。对此我真的很抱歉。那么你能提供你想要的输入和输出样本吗?通过这一点,我希望看到您想要的愿景,并解决您的问题。如果你能合作解决这个问题,我很高兴。是的,这也很混乱,因为在整个文件中,有所有标签的电子表格文件和有标签的工作表之间没有什么区别。基本上是第一次或第一次,我的意思是我实际上正在调用service.update_spreadsheet_value多次在我的应用程序中填充所有电子表格;但是我会多次调用我的应用程序,以便更新相同单元格中的相同值。我将添加一个具体的示例据我所知,append将在添加之前查找空行,但由于我使用的是模板,其中可能已经有一些数据,例如带有公式的列或示例数据。。。我将尝试看看我是否可以保持源代码表干净,并且很容易附加。否则,一个更好的解决方案可能需要在之前清理模板并附加所有数据(包括标题)?该模板很有用,因为还有其他工作表可以格式化我的用户输入的原始数据backend@CyrilDuchon Doris很抱歉给您带来不便。首先,为了正确理解,我想确认一下你的情况。在您的问题中,首先,工作表有1000行,列从A到Z。对于此工作表,当您使用values.update将列添加到AA时,会发生此类错误。您希望添加没有错误的列。我可以这样理解。如果我误解了你的情况,请告诉我。我想修改它。对不起,我原来的帖子缺少解释/一个清晰的例子。我的问题在于列的数量而不是行的数量。我正在尝试替换远少于1k的行,但一次替换超过26列,而26列的限制是导致崩溃的原因。当我打开GoogleSpreadsheet模板时,我看到我已经添加了不止一列,所以问题似乎真的来自update_spreadsheet_value方法,我需要使用该方法,因为我可能需要替换现有数据。但我将在我的报告中添加一个明确的例子post@Cyril多丽丝:谢谢你的回复。我能问一下你的情况吗?1.是否要将模板工作表复制到新电子表格中的工作表?2.1和2的区别是什么?第一次是什么?不幸的是,我还无法从您的附加信息中看到您想要做什么。我想这是因为我的英语能力差。对此我真的很抱歉。那么你能提供你想要的输入和输出样本吗?通过这一点,我希望看到您想要的愿景,并解决您的问题。如果你能合作解决这个问题,我很高兴。是的,这也很混乱,因为在整个文件中,有所有标签的电子表格文件和有标签的工作表之间没有什么区别。基本上是第一次或第一次,我的意思是我实际上正在调用service.update_spreadsheet_value多次在我的应用程序中填充所有电子表格;但是我会多次调用我的应用程序,以便更新相同单元格中的相同值。我将补充一个具体的例子
worksheet.resize(2000)