You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gspread下载Google Sheet时数据加载异常显示‘Cargando...’

解决Google Sheet复杂文档下载后单元格显示“Cargando...”的问题

你的问题出在复杂文档的计算未完成时,API就返回了加载中的占位符。以下是几个可行的解决办法:

现有代码

import os
import pandas as pd
import gspread

__doc_id_horarios = "你的文档ID"  # 补充缺失的全局变量

def download_gs_sheet(data_path_: str, filename: str, s_name: str, doc_id: str =__doc_id_horarios) -> None:
    """ Función para descargar hoja de cálculo desde Google Sheets

    :param data_path_: La ruta donde se guardará el archivo.
    :param filename: el nombre del archivo a guardar.
    :param s_name: La pestaña/hoja a descargar del documento.
    :param doc_id: El identificador del documento.
    """
    credential = os.path.join(os.path.dirname(__file__), 'credentials', "service_account.json")
    gc = gspread.service_account(credential)
    spreadsheet = gc.open_by_key(doc_id)
    worksheet = spreadsheet.worksheet(s_name)
    rows = worksheet.get_values()

    df = pd.DataFrame(rows)
    print(df)
    filename = os.path.join(data_path_, filename)
    df.to_excel(filename)

解决办法

1. 指定值渲染选项,强制获取计算后的值

修改get_values()调用,添加value_render_option参数,让API返回计算完成的最终值而非加载占位符:

# 获取无格式的原始计算值
rows = worksheet.get_values(value_render_option='UNFORMATTED_VALUE')
# 或者保留格式的计算值
# rows = worksheet.get_values(value_render_option='FORMATTED_VALUE')

2. 等待文档计算完成后再获取数据

对于超大型计算密集型文档,先触发计算刷新,再等待足够时间让后台完成计算:

import time

# ... 原有代码 ...
worksheet = spreadsheet.worksheet(s_name)

# 触发计算刷新(更新一个无关单元格,不影响原有数据)
current_value = worksheet.cell(1, 1).value
worksheet.update_cell(1, 1, current_value)
# 根据文档复杂度调整等待时间,比如10-30秒
time.sleep(15)

# 再获取计算完成的数据
rows = worksheet.get_values(value_render_option='UNFORMATTED_VALUE')
# ... 后续代码 ...

3. 复制工作表到临时文档再下载

原文档可能因缓存或会话问题导致计算停滞,复制到临时文档后Google会重新计算所有公式,此时再下载数据:

import time

# ... 原有代码 ...
spreadsheet = gc.open_by_key(doc_id)
worksheet = spreadsheet.worksheet(s_name)

# 创建临时文档
temp_spreadsheet = gc.create("temp_download_sheet")
# 复制目标工作表到临时文档
worksheet.copy_to(temp_spreadsheet.id)
# 等待复制和计算完成
time.sleep(20)

# 获取临时工作表的数据
temp_worksheet = temp_spreadsheet.worksheet(s_name)
rows = temp_worksheet.get_values(value_render_option='UNFORMATTED_VALUE')

# 可选:删除临时文档
gc.del_spreadsheet(temp_spreadsheet.id)
# ... 后续代码 ...

原因分析

你的文档包含大量公式、数组运算或外部数据引用,浏览器打开需要数秒加载,说明Google Sheets后台需要时间完成计算。gspread和pydrive2默认调用API时,会直接返回当前单元格的状态(即未完成计算的“Cargando...”占位符),而非最终计算结果。通过上述方法,可以确保API返回的是已计算完成的实际数据。

内容的提问来源于stack exchange,提问作者Ivannpy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:10:49