Подтвердить что ты не робот

Как переименовать лист (рабочий лист) в электронной таблице Google Таблиц, используя API в Python?

Я пытался/долго пытался решить эту проблему. Я прочитал документацию для gspread, и я не могу найти, что есть способ переименовать рабочий лист. Кто-нибудь из вас знает, как это сделать? Я бы очень оценил это! Существует действительно файл workheet.title, который дает имя рабочего листа, но я не могу найти способ переименовать фактический лист.

Заранее благодарю вас!

4b9b3361

Ответ 1

Это извлечение библиотеки, которую я закодировал лично:

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

Я думаю, что с небольшим усилием вы можете реализовать его в своем коде и получить то, что хотите. Чтобы выполнить вызов batchUpdate, вам понадобится файл spreadsheetId, а также инициализированный service, как описано в Python QUickstart - API-интерфейсе Google.

Ответ 2

Ваш ответ можно решить с помощью HTTP-запроса от Python.

Ссылка здесь

Вам нужно отправить некоторые метаданные для рабочего листа через HTTP.

Например, получите идентификатор рабочего листа с помощью Python и отправьте следующую информацию:

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

На веб-сайте также есть решение Java и .NET. (Это для старой версии 3)

Для более новой версии вы можете использовать пакетное обновление через HTTP-запрос POST от Python.

ссылка здесь

Данные для запроса

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

для отправки через POST на https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

В обоих запросах замените электронную таблицу в URL с идентификатором редактируемого вами листа Google.

Обратите внимание на изменение с v3 на v4 в URL-адресах.

Если вы используете приложение версии 3 и хотите выполнить миграцию, ссылка на это здесь

ИЗМЕНИТЬ

Комментарий отметил, что второй запрос не изменяет имя рабочего листа. Добавленная ссылка показывает способ изменения сложных свойств рабочего листа, я скоро буду обновлять свой ответ.

Ответ 3

Вы можете добиться того же с портом gspread для api v4 - pygsheets (автор здесь). Соответствующий код с использованием pygsheets будет,

import pygsheets

gc = pygsheets.authorize()

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