2017-06-06 1 views
1

Utilisation de l'API feuilles avec Python J'essaie de formater une feuille en utilisant des couleurs alternées. Dans l'interface utilisateur, cela se trouve à Format> Couleurs alternatives ...Google Sheets alternant les couleurs via l'API

D'après ce que j'ai pu trouver, cela se fait via l'API en utilisant banding. Malheureusement, je n'ai pas réussi à trouver un exemple concret de la façon dont cela est fait. Voici le dictionnaire des valeurs que j'ai construit, les valeurs de couleur ne sont pas importantes pour le moment, je voudrais juste coloriser la feuille.

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() 

Cela échoue avec l'erreur suivante:

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."> 

Je suis assez certain que ma question est la valeur des champs, mais je ne peux pas trouver un exemple valide de ce qu'il faut utiliser ici. J'obtiens la même erreur si j'omets complètement la clé de champs.

Répondre

1

Par les documents de référence pour batchUpdate, requests prend un tableau de Request objets. Chaque Request doit avoir exactement un ensemble de champs, les champs disponibles pour être baguage:

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

Il n'y a pas de champ bandedRange, qui est ce que vous essayez de définir. C'est ce que dit le message d'erreur (Unknown name "banded_range" at 'requests': Cannot find field.) ... bien que je ne sache pas pourquoi il a traduit bandedRange en snake_case.

Selon si vous souhaitez ajouter ou mettre à jour la gamme bagués, vous devez créer soit updateBanding avec un objet UpdateBandingRequest ou addBanding avec un objet AddBandingRequest.

En ajoutant addBanding à votre format JSON. Comme expliqué ci-dessus, vous finirez par créer le JSON ci-dessous. En outre, la clé fields est facultative.

{'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, 
      } 
     }, 
     }, 
    }, 
    },