【问题标题】:google-api-ruby-client: batchupdate spreadsheet valuesgoogle-api-ruby-client:批量更新电子表格值
【发布时间】:2021-07-02 16:02:53
【问题描述】:

按照here 中的说明执行批量更新。

首先,我构建了所需的 ValueRange 对象,如下所示:

values = [
  ["first", "title", "second", "url", "long"]
]

range = "WorksheetInParentSpreadsheet!A1:M"

data = Google::Apis::SheetsV4::ValueRange.new
data.values = values
data.major_dimension = 'ROWS'
data.range = range

接下来使用上面 1 中的信息来构建请求,如下所示:

spreadsheet = `spreadsheet_object`
request = Google::Apis::SheetsV4::BatchUpdateValuesRequest.new
request.data = data
request.value_input_option = value_input_option

最后,我提出请求:

sheet_service.batch_update_values(spreadsheet.id, request)

我希望这会更新工作表,但我得到了这个错误:

NoMethodError Exception: undefined method `each_with_index' for #<Google::Apis::SheetsV4::ValueRange:0x00007ffc7826c2e0>

看来 ValueRange 要么:

  • 不回复each_with_index
  • 或提供的ValueRange 对象(数据)缺少可枚举对象

通常会检查我正在使用的 gem,但在这种情况下,响应没有提供行或文件来缩小错误范围。

我被难住了。我错过了什么?

完整代码:

values = [
  ["first", "title", "second", "url", "long"]
]

range = "WorksheetInParentSpreadsheet!A1:M"

data = Google::Apis::SheetsV4::ValueRange.new
data.values = values
data.major_dimension = 'ROWS'

spreadsheet = `spreadsheet_object`
request = Google::Apis::SheetsV4::BatchUpdateValuesRequest.new
request.data = data
request.value_input_option = value_input_option
data.range = range

sheet_service.batch_update_values(spreadsheet.id, request)

【问题讨论】:

  • 嗨,如果可以的话,能否请您提供您的完整代码?
  • 嗨@RonM!编辑以明确完整的代码是什么。唯一缺少的步骤是授权标头,这不是问题,因为对客户端的请求通过,因此表明授权有效。
  • 是的,我想检查一下您的 sheet_service,因为在检查 api 库时,几乎所有其他对象都是正确的。只是为了让我们复制您的问题

标签: google-sheets-api google-apis-explorer google-api-ruby-client


【解决方案1】:

修改点:

  • Sheets API 中的 spreadsheets.values.batchUpdate 方法中,data 的属性值必须为数组。
  • value_input_option 未声明。

当以上几点反映到你的脚本中时,它变成如下。

修改脚本:

value_input_option = "USER_ENTERED" # Please set this for your actual situation.

values = [
  ["first", "title", "second", "url", "long"]
]

range = "WorksheetInParentSpreadsheet!A1:M"

data = Google::Apis::SheetsV4::ValueRange.new
data.values = values
data.major_dimension = 'ROWS'

spreadsheet = `spreadsheet_object`
request = Google::Apis::SheetsV4::BatchUpdateValuesRequest.new

request.data = [data] # <--- Modified

request.value_input_option = value_input_option
data.range = range

sheet_service.batch_update_values(spreadsheet.id, request)
  • 在本次修改中,假设sheet_servicespreadsheet.id的值为有效值。请注意这一点。

参考:

【讨论】:

  • 我完全错过了需要成为数组的数据;谢谢!
  • @SavageSuga 感谢您的回复。很高兴您的问题得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2013-08-22
相关资源
最近更新 更多