Python导出Google Sheets出现exportSizeLimitExceeded错误如何修改脚本
错误根因
Google Sheets对导出为XLSX格式有硬限制:单文件导出上限为10MB,或单元格总数超过500万时就会触发exportSizeLimitExceeded的403错误,属于服务端限制,无法通过修改权限绕过,只能调整导出逻辑适配。
需要补充的逻辑及实现方案
- 新增导出前的错误校验逻辑
在写入文件前先判断响应状态码,如果返回403且错误原因匹配exportSizeLimitExceeded,自动切换为分批导出模式,不要直接写入响应内容。 - 新增分批次拉取数据逻辑
通过Google Sheets API的ranges参数指定每次拉取的行/列范围,比如每次拉取5万行数据,拉取完成后再合并为完整文件。如果有多张工作表,也可以按工作表拆分导出。 - 新增多批次数据合并逻辑
分批次拉取到的数据可以通过pandas、openpyxl等工具合并为同一个XLSX文件,也可以先导出为多个CSV文件后再合并,CSV格式的导出限制比XLSX宽松很多,适合处理超大数据量。
补充后的参考代码
import os import datetime import requests import pandas as pd # 原配置保持不变 SPREADSHEET_ID = "替换为你的表格ID" AUTH_HEADER = {"Authorization": "Bearer 替换为你的授权token"} path = "/root/xlsx/" prefix = "Remastered" suffix = datetime.datetime.now().strftime("%Y%m%d") filename = prefix + "_" + suffix + ".xlsx" v = os.path.join(path, filename) print(v) # 原导出请求(这里的res是你之前的请求响应) # res = requests.get(你的原导出请求链接, headers=AUTH_HEADER) # 新增错误判断和分批导出逻辑 if res.status_code == 403: err_data = res.json() if err_data["error"]["errors"][0]["reason"] == "exportSizeLimitExceeded": # 示例:按5万行拆分拉取,可根据你的表格实际列数调整步长 step = 50000 total_rows = 300000 # 替换为你的表格实际总行数,也可以先调用API获取总行数 all_data = [] # 先拉取表头 header_res = requests.get( f"https://sheets.googleapis.com/v4/spreadsheets/{SPREADSHEET_ID}/values/Sheet1!A1:Z1", headers=AUTH_HEADER ) headers = header_res.json()["values"][0] # 分批拉取内容 for start in range(2, total_rows + 2, step): end = min(start + step - 1, total_rows + 1) batch_res = requests.get( f"https://sheets.googleapis.com/v4/spreadsheets/{SPREADSHEET_ID}/values/Sheet1!A{start}:Z{end}", headers=AUTH_HEADER ) batch_values = batch_res.json().get("values", []) all_data.extend(batch_values) # 合并写入xlsx df = pd.DataFrame(all_data, columns=headers) df.to_excel(v, index=False) else: # 正常导出逻辑不变 with open(v, 'wb') as f: f.write(res.content)
优化建议
- 如果表格行数不确定,可以先调用一次API拉取表格的元数据,获取实际总行数后再计算拆分步长,不需要手动写死
- 数据量极大的情况下优先选择导出为CSV格式,导出速度更快,限制更少,后续需要XLSX格式再做转换
- 可以给分批请求增加重试逻辑,避免网络波动导致拉取失败
内容的提问来源于stack exchange,提问作者rodskies
相关产品推荐
相关产品推荐

