求助:无法通过Sheety在PyCharm提取Google Sheets数据并打印输出
解决Sheety无法提取Google Sheets数据及打印输出的问题
以下是逐步排查和解决的方案:
1. 核对Sheety API基础配置
- 确认Sheety API端点URL完全正确:登录Sheety后台,找到你的项目,复制生成的API链接(格式类似
https://api.sheety.co/xxxxxx/yourSheetName/yourTabName),不要手动修改路径部分。 - 检查认证方式:
- 若使用API密钥,需在请求头中添加
Authorization: Bearer 你的API密钥;若用基本认证,需将Sheety的用户名和密码转为Base64编码后放在Authorization: Basic 编码字符串头中。 - 确保Google Sheet的共享权限允许Sheety访问:要么将表格设置为**“任何人拥有链接即可查看”**,要么在Sheety后台复制服务邮箱,添加为Google Sheet的协作者。
- 若使用API密钥,需在请求头中添加
2. 调试请求响应,定位问题
先简化代码,只做基础请求和响应打印,确认数据是否能正常获取:
import requests # 替换为你的Sheety API地址和认证信息 SHEETY_ENDPOINT = "https://api.sheety.co/xxxxxx/yourSheet/yourTab" headers = { "Authorization": "Bearer YOUR_SHEETY_API_KEY" } response = requests.get(SHEETY_ENDPOINT, headers=headers) # 先打印状态码和原始响应文本,这是排查关键 print("响应状态码:", response.status_code) print("响应内容:", response.text)
- 状态码
200:请求成功,接下来处理数据解析; - 状态码
401:认证失败,检查API密钥或基本认证信息; - 状态码
403:权限不足,检查Google Sheet共享设置; - 状态码
404:API端点错误,重新复制Sheety生成的链接。
3. 正确解析Sheety返回的JSON数据
Sheety返回的JSON结构默认以工作表名称为顶级键,比如工作表名为patients,数据会嵌套在response.json()["patients"]中。示例代码:
from datetime import datetime # 假设响应成功,解析数据 data = response.json()["patients"] # 替换为你的工作表名称 # 遍历数据并计算化疗天数 for patient in data: # 注意:这里的日期格式要和Google Sheet中的格式完全匹配 start_date = datetime.strptime(patient["startDate"], "%Y-%m-%d") end_date = datetime.strptime(patient["endDate"], "%Y-%m-%d") chemo_duration = (end_date - start_date).days # 按预期格式打印 print(f"患者姓名:{patient['name']},化疗天数:{chemo_duration}天")
- 注意Sheety会将Google Sheet的列名转为驼峰式(比如表格中的“Start Date”会变成
startDate),代码中的键名必须和返回的JSON键一致。 - 日期格式不匹配会抛出
ValueError,需根据表格中的日期格式调整strptime的参数(比如"%d/%m/%Y"对应DD/MM/YYYY格式)。
4. 排查打印无输出的情况
- 如果
print(len(data))返回0:说明Sheety没有获取到表格数据,回到步骤1检查权限和API配置; - 如果遍历循环无输出:确认数据列表非空,且循环逻辑正确;
- 若PyCharm中无输出,尝试用系统终端运行代码,排除IDE的输出拦截或网络代理问题。
5. 其他常见问题
- Sheety免费版有请求次数限制:登录Sheety后台查看请求统计,若超过配额需等待重置或升级套餐;
- Google Sheet数据未同步:在Sheety后台点击“Sync”按钮,手动触发表格数据同步。
内容的提问来源于stack exchange,提问作者Ahmed Eldimllawi
相关产品推荐
相关产品推荐

