我正在使用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获取第一张纸的名称
因此,您可以使用电子表格的第一张表始终具有sheetId
0
的知识。
- 在提出请求时指定您感兴趣的
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"
}
}
]
}
现在您只需要过滤这个对象来检索属于
sheetId
0
的标题。您可以使用此标题而不是
Sheet1
来指定spreadsheets.values.get
中的范围