web-dev-qa-db-fra.com

Comment renommer une feuille de travail dans une feuille de calcul Google Sheets à l'aide de l'API en Python?

Je cherche/cherche à résoudre ce problème depuis longtemps. J'ai lu la documentation de gspread et je ne trouve pas qu'il existe un moyen de renommer une feuille de calcul. Quelqu'un sait comment? Je l'apprécierais massivement! Il existe effectivement worksheet.title qui donne le nom de la feuille de calcul, mais je ne trouve pas le moyen de renommer la feuille.

Merci d'avance!

18
Ilden Gemil

Voici une extraction d'une bibliothèque que j'ai personnellement codée:

def _batch(self, requests):
    body = {
        'requests': requests
    }
    return self._service.spreadsheets().batchUpdate(spreadsheetId=self.spreadsheetId, body=body).execute()

def renameSheet(self, sheetId, newName):
    return self._batch({
        "updateSheetProperties": {
            "properties": {
                "sheetId": sheetId,
                "title": newName,
            },
            "fields": "title",
        }
    })

Je pense qu'avec un peu d'effort, vous pouvez l'implémenter dans votre code et obtenir ce que vous voulez. Afin de faire l'appel batchUpdate, vous aurez besoin du tableurId ainsi que de la service initialisée, comme expliqué dans le Python QUickstart - API Google Sheet

15
Mattia Galati

Votre réponse peut être résolue via une requête HTTP de Python. 

Le lien est ici

Vous devez envoyer une sorte de métadonnée pour la feuille de calcul via HTTP. 

Par exemple, obtenez l'ID de la feuille de calcul à l'aide de Python et envoyez les informations suivantes:

<entry>
  <id>
    https://spreadsheets.google.com/feeds/worksheets/key/private/full/worksheetId
  </id>
  <updated>2007-07-30T18:51:30.666Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#worksheet"/>
  <title type="text">Income</title>
  <content type="text">Expenses</content>
  <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/list/key/worksheetId/private/full"/>
  <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/cells/key/worksheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/key/private/full/worksheetId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/key/private/full/worksheetId/version"/>
  <gs:rowCount>45</gs:rowCount>
  <gs:colCount>15</gs:colCount>
</entry>

Le site Web propose également une solution Java et .NET. (Ceci est pour la version héritée 3)

Pour la version plus récente, vous pouvez également utiliser une mise à jour par lot via une demande POST http de Python. 

lien est ici

Les données pour la demande sont 

{
  "requests": [{
      "updateSpreadsheetProperties": {
          "properties": {"title": "My New Title"},
          "fields": "title"
        }
    }]
}

à envoyer via POST à https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

Dans les deux demandes, remplacez l'utilitaire tableur dans l'URL par l'ID de la feuille Google que vous modifiez. 

Notez le changement de v3 à v4 dans les URL. 

Si vous utilisez une application de version 3 et souhaitez migrer, le lien qui vous mène à ici

MODIFIER

Un commentateur a noté que la deuxième demande ne change pas le nom d'une feuille de calcul. Le lien que j'ai ajouté montre comment modifier les propriétés complexes d'une feuille de calcul. Je mettrai à jour ma réponse prochainement. 

3
ytpillai

Vous pouvez réaliser la même chose avec le port gspread pour api v4 - pygsheets (auteur ici). Le code correspondant utilisant pygsheets sera,

import pygsheets

gc = pygsheets.authorize()

# Open spreadsheet and then workseet
sh = gc.open('my new ssheet')
wks = sh.sheet1
wks.title = "new title"
1
nithin