2017-06-06 5 views
1

Mit der Blatt-API mit Python versuche ich ein Blatt mit wechselnden Farben zu formatieren. In der Benutzeroberfläche ist dies bei Format> Alternierende Farben ...Google Sheets wechselnde Farben über API

Von was ich gefunden habe, ist dies über die API mit banding getan. Leider konnte ich kein funktionierendes Beispiel dafür finden. Unten ist das Wertewörterbuch, das ich erstellt habe, Farbwerte sind im Moment nicht wichtig, ich würde es nur gerne das Blatt färben.

requests = { 
    'bandedRange': { 
    'bandedRangeId': 1, 
    'range': { 
     'sheetId': 0, 
     'startRowIndex': 0, 
     'endRowIndex': len(values), 
     'startColumnIndex': 0, 
     'endColumnIndex': 4, 
    }, 
    'rowProperties': { 
     'headerColor': { 
     'red': 1, 
     'green': 0, 
     'blue': 1, 
     'alpha': 1, 
     }, 
     'firstBandColor': { 
     'red': 1, 
     'green': 0, 
     'blue': 0, 
     'alpha': 0, 
     }, 
     'secondBandColor': { 
     'red': 0, 
     'green': 1, 
     'blue': 0, 
     'alpha': 0, 
     } 
    }, 
    }, 
    'fields': '*', 
} 
body = {'requests': requests} 
response = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute() 

Dies schlägt mit dem folgenden Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/oauth2client/_helpers.py", line 133, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/googleapiclient/http.py", line 840, in execute 
    raise HttpError(resp, content, uri=self.uri) 
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/$spreadsheet_id:batchUpdate?alt=json returned "Invalid JSON payload received. Unknown name "banded_range" at 'requests': Cannot find field."> 

Ich bin ziemlich sicher, dass meine Frage das Feld Wert ist, aber ich kann kein gültiges Beispiel für das finden, was hier zu verwenden. Ich bekomme den gleichen Fehler, wenn ich den Feldschlüssel ganz weglasse.

Antwort

1

Gemäß der Referenzdokumente für batchUpdate, requests nimmt ein Array von Request Objekte. Jeder Request muss genau ein Feld gesetzt, die zur Verfügung stehenden Felder für Banding Wesen:

"updateBanding": { 
    object(UpdateBandingRequest) 
    }, 
    "addBanding": { 
    object(AddBandingRequest) 
    }, 
    "deleteBanding": { 
    object(DeleteBandingRequest) 
    }, 

Es gibt kein Feld bandedRange, das ist, was Sie zu setzen versuchen. Das sagt die Fehlermeldung (Unknown name "banded_range" at 'requests': Cannot find field.) ... obwohl ich keine Ahnung habe, warum bandedRange in snake_case übersetzt wurde.

Je nachdem, ob Sie hinzufügen möchten oder die gebänderte Bereich zu aktualisieren, dann würden Sie setzen entweder updateBanding mit einem UpdateBandingRequest Objekt oder addBanding mit einem AddBandingRequest Objekt.

Durch Hinzufügen von addBanding zu Ihrem JSON-Format. Wie oben erklärt, werden Sie am Ende den folgenden JSON erstellen. Außerdem ist der Schlüssel fields optional.

{'addBanding': { 
     'bandedRange': { 
     'bandedRangeId': 1, 
     'range': { 
      'sheetId': 0, 
      'startRowIndex': 0, 
      'endRowIndex': len(values), 
      'startColumnIndex': 0, 
      'endColumnIndex': 4, 
     }, 
     'rowProperties': { 
      'headerColor': { 
      'red': 1, 
      'green': 0, 
      'blue': 1, 
      'alpha': 1, 
      }, 
      'firstBandColor': { 
      'red': 1, 
      'green': 0, 
      'blue': 0, 
      'alpha': 0, 
      }, 
      'secondBandColor': { 
      'red': 0, 
      'green': 1, 
      'blue': 0, 
      'alpha': 0, 
      } 
     }, 
     }, 
    }, 
    },