如何从公开Google Spreadsheet获取各子表gid或对应访问URL?
可用替代方案
方案1:解析公开表格的HTML配置(无需API、无需XML解析)
该方案利用公开表格页面内预加载的子表配置信息,仅通过正则即可提取所有子表的标题和gid(每个子表的唯一标识,可用于构造CSV导出地址),完全满足你无需解析XML的需求,步骤如下:
- 构造主表公开访问URL:
https://docs.google.com/spreadsheets/d/{你的表格密钥}/edit - 发送GET请求获取页面HTML内容
- 匹配页面内预存的子表配置,提取每个子表的
name(对应标题)和id(对应gid) - 单个子表的CSV导出URL格式为:
https://docs.google.com/spreadsheets/d/{你的表格密钥}/export?format=csv&gid={gid}
Python实现示例:
import re import urllib.request import json def get_sheets_map(spreadsheet_key: str) -> dict: url = f"https://docs.google.com/spreadsheets/d/{spreadsheet_key}/edit" # 模拟浏览器UA避免被拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } req = urllib.request.Request(url, headers=headers) with urllib.request.urlopen(req) as f: html = f.read().decode("utf-8") # 正则匹配子表配置段 match_res = re.search(r'\"sheets\":(\[.*?\])', html, re.S) if not match_res: return {} sheets_raw = match_res.group(1).replace(r'\/', '/').replace(r'\"', '"') sheets_list = json.loads(sheets_raw) # 构造 子表标题:gid 映射 return { sheet["name"]: str(sheet["id"]) for sheet in sheets_list if sheet.get("name") and sheet.get("id") } # 调用示例 spreadsheet_key = "MyL0NgSpr4dsheetK3y3x4mpl3" sheets = get_sheets_map(spreadsheet_key) for sheet_name, gid in sheets.items(): csv_url = f"https://docs.google.com/spreadsheets/d/{spreadsheet_key}/export?format=csv&gid={gid}" print(f"子表名:{sheet_name},CSV地址:{csv_url}")
注意:只要表格设置为「所有人可查看」,该方法即可正常使用,不需要额外安装第三方依赖,完全用Python内置库即可实现。
方案2:官方Sheets API v4(适合长期稳定使用)
如果担心前端页面结构变动影响解析,可以选择官方API方案,仅需要申请免费的Google API密钥,不需要OAuth授权即可访问公开表格:
- 在Google Cloud控制台申请API密钥,启用Google Sheets API权限
- 构造请求URL:
https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet_key}?key={你的API密钥} - 返回的JSON结构中
sheets字段下直接包含所有子表的标题(properties.title)和gid(properties.sheetId)
内容的提问来源于stack exchange,提问作者bolino
相关产品推荐
相关产品推荐

