如何在Python Google Sheets API中获取"first sheet"



我正在使用Python googleapiclient来获取Sheet的内容。API当前要求指定工作表名称。这很好,但有时工作表的名称会更改,然后我会得到一个异常googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/...,因为再也找不到硬编码的工作表名称。我想让它适用于所有情况。

我找不到任何类似通配符的东西,所以我如何才能在电子表格中找到默认/第一张表?

现有代码:

sheets_service = discovery.build('sheets', 'v4', credentials=credentials)
content = sheets_service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range='Sheet1').execute()

我想要什么:

sheets_service = discovery.build('sheets', 'v4', credentials=credentials)
content = sheets_service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range='*').execute()

在您的情况下,为了检索第一个选项卡的工作表名称,如何使用"方法:电子表格;表API?当这反映在脚本中时,它将变为如下。

修改的脚本1:

在该修改中;方法:电子表格;使用。

sheets_service = discovery.build('sheets', 'v4', credentials=credentials)
# Here, the sheet name of the 1st tab is retrieved.
res = sheets_service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
sheetName = res.get("sheets", [])[0].get("properties").get("title")
content = sheets_service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=sheetName).execute()

修改的脚本2:

在该修改中;方法:电子表格;未使用。

sheets_service = discovery.build('sheets', 'v4', credentials=credentials)
content = sheets_service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range="A:ZZZ").execute()
  • 在此修改中,仅使用范围的a1表示法,不包括图纸名称。在这种情况下,将检索第一个选项卡的值。在当前阶段中,最大列为ZZZ。因此,作为一个样本;A: ZZZ";使用。但是,如果您已经知道范围,则可以使用特定范围。如果不包括图纸名称,则始终从第一个选项卡检索值

参考:

  • 方法:spreadsheets.get

您可以使用spreadsheets.get获取第一张纸的名称

因此,您可以使用电子表格的第一张表始终具有sheetId0的知识。

  • 在提出请求时指定您感兴趣的fields

sheets = service.spreadsheets().get(spreadsheetId=spreadsheet_id, fields='sheets(properties(sheetId,title))'

  • 这将返回一个对象,该对象包含电子表格中所有工作表的工作表ID和标题:
{
"sheets": [
{
"properties": {
"sheetId": 0,
"title": "Sheet1"
}
},
{
"properties": {
"sheetId": 457388739,
"title": "Sheet2"
}
}
]
}
  • 现在您只需要过滤这个对象来检索属于sheetId0的标题。

  • 您可以使用此标题而不是Sheet1来指定spreadsheets.values.get中的范围

最新更新