2016-06-05 9 views
0

Die Google-Dokumentation Seite sagtGoogle Sheets API V4 Zeile hinzufügen .NET

Die Sheets API v4 eine AppendCells Anfrage bereitstellt, die mit dem spreadsheets.batchUpdate Verfahren verwendet werden können, um eine Reihe von Daten auf ein Blatt anhängen (und gleichzeitig die Zelleigenschaften und die Formatierung aktualisieren, falls gewünscht).

Und das funktioniert zum Hinzufügen neuer Zeilen, obwohl das Erstellen der RowData-Nutzdaten mühsam ist. Dies ermöglicht jedoch nicht das Festlegen der ValueInputOption.

Google sagt auch

Es ist jedoch in der Regel einfacher, die A1-Schreibweise der Zeile, die Sie hinzufügen möchten zu bestimmen, und geben Sie dann eine spreadsheets.values.update Anfrage diese Zeile zu überschreiben. In diesem Fall werden alle Daten in der angegebenen Zeile überschrieben.

Jetzt funktioniert das Aktualisieren von Daten in vorhandenen Zeilen - einschließlich der ValueInputOption. Wenn ich dies jedoch zum Anhängen einer neuen Zeile verwende (d. H. Einen Bereich bereitstellen, der die nächste Zeile ist), gibt der Server einen Fehler 503 zurück. Es muss einen Trick geben, den ich vermisse?

+1

Bitte teilen Sie die Codes, die Sie bisher getan haben, und Fehlerprotokolle, damit wir sehen können, wo der Fehler herkommt. – Teyam

+0

Code unten in der Antwort hinzugefügt, da ich nicht mehr den genauen Code von habe, als ich mit Problem kämpfte. Der unten angegebene Code enthält jedoch alle relevanten Codes –

Antwort

1

Ich sollte Code in meine Frage geschrieben haben, wie der Kommentator vorgeschlagen hat. Allerdings poste ich es als Teil dieser Antwort - was eindeutig eine suboptimale Lösung ist, aber meinem Zweck dient.

Dies ist der Code, den ich am Ende mit (OAuth und Service Instanziierung Weglassen)

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 

Kurz gesagt, ich rufe AppendCells die Größe des ‚Grid‘ zu erweitern und dann Werte am Aktualisierung in der so erzeugte leere Zeilen. Wenn Sie versuchen, Werte für die neue Zeile zu aktualisieren, gibt der Server den Fehler "Dienst nicht verfügbar" zurück. Ich habe das Problem gefunden, als ich mit dem Aktualisieren von Werten (values.batchUpdate) in vorhandenen Zeilen experimentierte und neue Zeilen in derselben Anfrage hinzufügte. Die Fehlermeldung sprach in diesem Fall von Updates über das Grid hinaus.

0

Es gibt keine API zum Anhängen von Zeilen über die colletsheets.values ​​(die A1-Notation unterstützt & ValueInputOption). Wir verfolgen das als Feature-Anforderung intern und fügen wahrscheinlich Unterstützung hinzu. In der Zwischenzeit können Sie Zeilen nur über die batchUpdate-Methode anhängen (wenn Sie jedoch keine Extras benötigen, die das CellData-Objekt bietet, z. B. Formatierung, dann ist es, wie Sie sagen, langwierig, dies zu tun).