18

我一直在努力/寻找解决这个问题很长一段时间。 我已阅读gspread的文档,我无法找到有办法重命名工作表。 你们谁都知道如何?我会大量赞赏它! 确实有worksheet.title给出了工作表的名称,但我找不到重命名实际工作表的方法。如何使用Python中的API重命名Google表格电子表格中的(工作)工作表?

预先感谢您!

+0

您可以在Google Apps脚本的帮助下实现此目的。您可以使用rename(newName)重命名文档。 var ss = SpreadsheetApp.getActiveSpreadsheet(); ss.rename(“这是新的名字”); 如果要将当前活动工作表重命名为给定的新名称,可以调用renameActiveSheet(newName)。 //下面的代码将活动工作表重命名为“Hello world” SpreadsheetApp.getActiveSpreadsheet()。renameActiveSheet(“Hello world”);欲了解更多信息。检查此[文档](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#renamenewname) – KENdi

+1

@KENdi,但再次,如何可以在Python中做到这一点? –

+0

它似乎与以下请求有关: “updateSheetProperties”:{object(UpdateSheetPropertiesRequest)},UpdateSheetPropertiesRequest被描述为:“使用指定的sheetId更新工作表的属性。” ...除了我找不到方法设置工作表https://developers.google.com/sheets/reference/rest/v4/spreadsheets/request#updatesheetpropertiesrequest – Christophe

回答

12

这是一个图书馆的提取其中我个人编码:

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以及通过在Python QUickstart - Google Sheet API

+0

这个答案只是超级简化的“FieldMasks”。为什么地球上它必须是如此复杂但很好的答案。 – Antony

+0

我同意你的看法,我能想到的唯一答案就是Google采用了这种方法,以便从任何类型的功能中抽象出来,并且用单一方法支持几乎任何类型的操作。 –

3

你的答案解释初始化service可以解决从Python中的HTTP请求。

Link是here

您需要发送某种元数据对通过HTTP的工作表。

例如,获得使用Python工作表的ID,并发送以下信息:

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

对于较新的版本,您也可以通过来自Python的POST http请求使用批量更新。

链路是here

该请求的数据是

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

通过POST发送到https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

在这两个请求,随着所述ID替换spreadsheetId在URL您正在编辑的Google表格。

请注意网址中从v3到v4的变化。

如果您使用的是第3版的应用程序,并希望迁移,链接是here

编辑

一个评注者指出的是,第二个请求不工作表的名称更改。我添加的链接显示了更改工作表复杂属性的方式,我将很快更新我的答案。

+0

请注意,您发布的请求与更改** Spreadsheet **(因此您的请求会重命名整个Spreadsheet),但用户明确要求如何重命名** **工作表**。 –

+0

啊,是的,我意识到第二个请求没有这样做,但是,我链接的页面显示了电子表格的更复杂的属性,也可以编辑。但是,由于OP可以从他们的代码中获得工作表的ID(他们提到他们可以获得标题,所以他们也可以使用ID),但已弃用(但仍然有效)的API请求应该也会更改工作表的名称。 – ytpillai

1

您可以使用api v4的gspread端口 - 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" 
+0

最佳答案。一个美妙的图书馆,更好,然后gspread。 –

相关问题