Google文档页面显示
Sheets API v4确实提供了一个AppendCells请求,可以与spreadsheets.batchUpdate方法一起使用,将一行数据附加到工作表(如果需要,还可以同时更新单元格属性和格式)。
这确实可以用于添加新行,即使创建RowData有效负载也很繁琐。但是,这不允许设置ValueInputOption。
谷歌也说
但是,通常更容易简单地确定要添加的行的A1表示法,然后发出spreadsheets.values.update请求来覆盖该行。在这种情况下,将覆盖指定行中的任何数据。
现在这适用于更新现有行的数据 - 包括ValueInputOption。但是,当我使用它来附加一个新行(即提供一个下一行的范围)时,服务器返回503错误。必须有一个我缺少的技巧?
答案 0 :(得分:2)
我应该按照评论者的建议在我的问题中发布代码。但是,我将其作为此答案的一部分发布 - 这显然是次优解决方案,但符合我的目的。
这是我最终得到的代码(省略OAuth和服务实例化)
Public Function AddRows(Values As Object()()) As Boolean
Try
'Create dummy rows value payload
Dim cell2add As New CellData
Dim cellval As New ExtendedValue
cellval.NumberValue = 0
cell2add.UserEnteredValue = cellval
Dim data2add As New RowData
data2add.Values = {cell2add}
Dim rowdataList As New List(Of RowData)
For i = 0 To UBound(Values)
rowdataList.Add(data2add)
Next
'Add a request to append to the sheet's data (expand grid)
Dim appendRequest As New AppendCellsRequest
appendRequest.SheetId = SheetID
appendRequest.Rows = rowdataList.ToArray
appendRequest.Fields = "*"
Dim request As New Request
request.AppendCells = appendRequest
'Execute the request
Dim bRequest As New BatchUpdateSpreadsheetRequest
bRequest.Requests = {request}
Dim bResponse As BatchUpdateSpreadsheetResponse = Service.Spreadsheets.BatchUpdate(bRequest, DataBaseName).Execute()
'Now update the newly added rows with data
Dim index As Integer = GetRowCount() - Values.Length + 2 'GetRowCount() calls the service to get sheet metadata and returns the rows of data (excluding the headers)
Dim vals As New ValueRange
vals.Values = Values
Dim urequest As SpreadsheetsResource.ValuesResource.UpdateRequest =
Service.Spreadsheets.Values.Update(vals, DataBaseName, Name & "!A" & index)
urequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED
Dim response As UpdateValuesResponse = urequest.Execute
Return response.UpdatedRows = Values.Length
Catch ex As Exception
Trace.WriteLine(Now.ToLongTimeString & ":" & ex.Message)
Return False
End Try
End Function
简而言之,我正在调用AppendCells来扩展'grid'的大小,然后更新由此创建的空白行中的值。如果您尝试更新新行的值,服务器将返回“服务不可用”错误。当我尝试更新现有行中的值(values.batchUpdate)并在同一请求中添加新行时,我发现了这个问题。在这种情况下的错误消息提到了“超越网格”的更新。
答案 1 :(得分:1)
没有用于通过spreadsheets.values集合追加行的API(支持A1表示法和ValueInputOption的行)。我们会在内部跟踪该功能请求,并可能会增加支持。在此期间,追加行的唯一方法是通过batchUpdate方法(但是,如果你不需要CellData对象提供的额外内容,例如格式化,那么就像你说的那样这样做是很繁琐的。) / p>