Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I rename a (work)sheet in a Google Sheets spreadsheet using the API in Python?

I have been trying/looking to solve this problem for a long while. I have read the documentation for gspread and I cannot find that there is a way to rename a worksheet. Any of you know how to? I would massively appreciate it! There is indeed worksheet.title which gives the name of the worksheet, but I cannot find a way to rename the actual sheet.

Thank you in advance!

like image 430
Ilden Gemil Avatar asked Jun 28 '16 10:06

Ilden Gemil


People also ask

How do I rename a sheet in Google Sheets API?

Just use the batchRequest API. Indicate in the sheetID the sheet id youre editing and the title field the new title. Then indicate "title" in the fields.


2 Answers

This is an extraction of a library which I've coded personally:

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

I think that with a little effort, you can implement it into your code and obtain what you want. In order to make the batchUpdate call, you will need the spreadsheetId as well as the initialized service as explained in the Python QUickstart - Google Sheet API

like image 197
Mattia Galati Avatar answered Sep 22 '22 12:09

Mattia Galati


Your answer can be solved via a HTTP request from Python.

Link is here

You need to send some sort of metadata for the worksheet via HTTP.

For example, get the ID of the worksheet using Python, and send the following info:

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

The website has a Java and .NET solution as well. (This is for the legacy version 3)

For the newer version, you can use a batch update via a POST http request from Python as well.

link is here

The data for the request is

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

to be sent via POST to https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

In both requests, replace the spreadsheetId in the URL with the ID of the Google Sheet you are editing.

Notice the change from v3 to v4 in the URLs.

If you are using a version 3 application and want to migrate, the link to that is here

EDIT

A commentor noted that the second request does not change name of a worksheet. The link I added shows the way to change intricate properties of a worksheet, I will be updating my answer soon.

like image 24
ytpillai Avatar answered Sep 20 '22 12:09

ytpillai