如何用Python的pandas读取Google Sheet为Excel格式并进行列搜索?
解决方案:无需gspread/service_account,直接读取Google Sheet为Excel格式操作
可以通过Google Sheets的原生导出API结合pandas实现,完全避开gspread和service_account.json的依赖,操作逻辑和处理本地Excel文件完全一致。
步骤1:生成Google Sheet的XLSX导出链接
- 打开目标Google Sheet,设置共享权限为「任何人可查看」(私有Sheet的适配见下文)
- 复制Sheet的原始URL(格式类似
https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/edit#gid=0) - 将URL中的
/edit替换为/export?format=xlsx,得到导出链接:https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/export?format=xlsx
步骤2:用pandas读取远程XLSX文件
直接通过请求获取XLSX字节流,用BytesIO模拟本地文件,再用pd.ExcelFile或pd.read_excel处理:
import pandas as pd import requests from io import BytesIO # 替换为你的Google Sheet导出URL EXPORT_URL = "https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/export?format=xlsx" # 获取XLSX字节流 resp = requests.get(EXPORT_URL) resp.raise_for_status() # 捕获请求错误 xlsx_buffer = BytesIO(resp.content) # 读取整个Excel文件,可按工作表名称筛选 excel_handler = pd.ExcelFile(xlsx_buffer) # 查看所有工作表名称 print("可用工作表:", excel_handler.sheet_names) # 加载目标工作表数据 target_sheet_name = "2024年Q1销售数据" df = excel_handler.parse(target_sheet_name)
步骤3:按列值检索信息
和处理本地Excel的逻辑完全一致,用pandas的布尔索引筛选:
# 示例:筛选「产品类别」列等于「电子产品」的所有行 filtered_data = df.loc[df["产品类别"] == "电子产品"] # 也可以多条件组合,比如同时筛选地区和销售额 filtered_data = df.loc[(df["地区"] == "华南") & (df["销售额"] > 10000)] print(filtered_data)
私有Sheet的适配(无需公开)
如果不想公开Sheet,可以通过OAuth2获取用户级别的访问令牌,在请求头中携带授权信息:
- 去Google Cloud Console创建桌面应用类型的OAuth2客户端ID
- 通过授权流程获取
access_token - 发起请求时添加授权头:
headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN"} resp = requests.get(EXPORT_URL, headers=headers)
这种方式不需要service_account.json,完全基于用户授权访问私有Sheet。
内容的提问来源于stack exchange,提问作者xlmaster
相关产品推荐
相关产品推荐

