如何使用Drive API获取Google表格中工作表的列表(名称和“gid”)?

38

我希望使用Google Drive API(Python)下载电子表格文件的一些标签。

文件的元数据中是否包含gids信息?

我现在尝试做的是(这可能不正确,请建议):

file_metadata = self.service.files().get(file_id=file_id).execute()
# in the following line, how can I get a download url with a gid (a tab in a spreadsheet file)
download_url = file_metadata.get('exportLinks')['text/csv']
# download the file.

1
我也想从API中获取那些gid和选项卡名称。另外,下载链接可以通过文件元数据的“exportLinks”属性获得,然后加上gid参数即可。 - AMS
谢谢 @AMS,是的,带上名字会很棒! - lucky_start_izumi
@AMS,我可以问一下为什么我们需要左移gid吗? - lucky_start_izumi
没有必要真的这样做。只是当你不能在注释中插入换行符时,阅读起来更好:P - AMS
什么是 gid 的意思? - davejagoda
4个回答

3
您可以使用旧的可视化API URL。
f'https://docs.google.com/spreadsheets/d/{doc_id}/gviz/tq?tqx=out:csv&sheet={sheet_name}'

通过名称下载工作表。我刚刚在这里发布了Google API Python库的代码。这也在另一个答案中提到,其中链接到Charts文档,其中显示了如何使用gid来完成此操作。或者,您可以将电子表格导出为例如Excel文件以下载所有工作表。

class MimeTypes:
    EXCEL = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

drive_api.files().export_media(fileId=file_id, mimeType=MimeTypes.EXCEL)

如果您仍然想通过gid获取表格,则在Google Sheets API中,gidsheetId(请参见此处)。
您可以使用Sheets API获取所有表格及其对应的sheetId

1

这似乎不再起作用了(可能是由于新的Google电子表格)。例如,使用此方法,omlf5j6的工作表ID给出了53609033112,而实际的gid是1366234904。 - Chris

0

您可以使用Google Apps Script中的电子表格服务来实现此操作。虽然没有直接的API调用方便,但至少是可能的:

  1. 调用SpreadsheetApp.openById(id)方法,使用Drive中的file_id打开电子表格。
  2. 调用Spreadsheet.getSheets()方法检索Sheet对象列表。
  3. 对于每个工作表,调用Sheet.getSheetId()Sheet.getSheetName()方法以获取名称(这是电子表格用户看到的内容)和sheetId(导出时需要提供gid=参数)。
你可以使用最近宣布的 Apps Script Execution API 为你的 Apps Script 项目提供 REST API,然后你可以以类似 Drive API 的方式调用它。

0

我有一个激进的想法:鉴于你打算自动化一些事情并且已经了解(至少一些)Python,为什么不将所需选项卡中的数据导出为CSV文件,下载它们,然后导入为 pandas.DataFrame。毕竟,这些数据结构是模仿Google(和Excel)表格而设计的,并且同样直观易用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接