it-swarm.com.de

Wie benenne ich ein (Arbeits-) Blatt in einer Google Sheets-Tabelle mithilfe der API in Python um?

Ich habe lange versucht, dieses Problem zu lösen. Ich habe die Dokumentation zu gspread gelesen und kann nicht feststellen, dass es eine Möglichkeit gibt, ein Arbeitsblatt umzubenennen. Weiß jemand von euch, wie es geht? Ich würde es sehr schätzen! Es gibt zwar worksheet.title, das den Namen des Arbeitsblatts angibt, aber ich kann keine Möglichkeit finden, das aktuelle Blatt umzubenennen.

Danke im Voraus!

18
Ilden Gemil

Dies ist eine Extraktion einer Bibliothek, die ich persönlich codiert habe:

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",
        }
    })

Ich denke, dass Sie ihn mit etwas Aufwand in Ihren Code implementieren und erhalten können, was Sie möchten. Um den Aufruf batchUpdate durchzuführen, benötigen Sie die Tabellenkalkulations-ID sowie die initialisierte service, wie in _ beschrieben. Python QUickstart - Google Sheet API

15
Mattia Galati

Ihre Antwort kann über eine HTTP-Anfrage von Python gelöst werden. 

Link ist hier

Sie müssen eine Art Metadaten für das Arbeitsblatt über HTTP senden. 

Rufen Sie beispielsweise die ID des Arbeitsblatts mit Python ab und senden Sie die folgenden Informationen:

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

Die Website bietet auch eine Java- und .NET-Lösung. (Dies ist für die ältere Version 3)

Für die neuere Version können Sie ein Batch-Update auch über eine POST http-Anforderung von Python verwenden. 

link ist hier

Die Daten für die Anfrage sind 

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

über POST an https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate senden

Ersetzen Sie in beiden Anforderungen die Tabellenkalkulations-ID in der URL durch die ID des gerade bearbeiteten Google-Tabellenblatts. 

Beachten Sie die Änderung von v3 zu v4 in den URLs. 

Wenn Sie eine Version 3-Anwendung verwenden und migrieren möchten, lautet der Link zu hier

BEARBEITEN

Ein Kommentator hat bemerkt, dass die zweite Anforderung den Namen eines Arbeitsblatts nicht ändert. Der von mir hinzugefügte Link zeigt, wie Sie komplexe Eigenschaften eines Arbeitsblatts ändern können. Ich werde meine Antwort in Kürze aktualisieren. 

3
ytpillai

Dasselbe können Sie mit dem gspread-Port für api v4 - pygsheets (Autor hier) erreichen. Der entsprechende Code, der Pygheets verwendet, lautet:

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

Wenn Sie Node verwenden, hat Folgendes bei mir funktioniert:

import {google} from 'googleapis';

const auth = new google.auth.OAuth2(...)

const sheetsService = google.sheets({version: 'v4', auth})

const requests = [
 {
  updateSheetProperties: {
   properties: {
    sheetId: 'id-of-the-sheet-that-you-want-to-rename',
    title: 'new-title',
   },
   fields: 'title'
   }
  }
];

sheetsService.spreadsheets.batchUpdate({
 spreadsheetId: 'some-spreasheet-id',
 requestBody: {
  requests,
 },
});
0
Alexey Yunoshev