Как переименовать лист (рабочий лист) в электронной таблице Google Таблиц, используя API в Python?
Я пытался/долго пытался решить эту проблему.
Я прочитал документацию для gspread, и я не могу найти, что есть способ переименовать рабочий лист.
Кто-нибудь из вас знает, как это сделать? Я бы очень оценил это!
Существует действительно файл workheet.title, который дает имя рабочего листа, но я не могу найти способ переименовать фактический лист.
Заранее благодарю вас!
Ответы
Ответ 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"