Pandas无法读取Google Drive下载的含公式Excel单元格值问题求助
根本原因
Google Drive 不会为存储的 .xlsm/.xlsx 文件中的公式预生成计算结果缓存,你通过API直接下载的文件里仅保留公式表达式,没有值缓存。
Pandas 调用默认引擎读取Excel时,只会读取单元格的已缓存值,不会主动计算公式内容,因此公式单元格会返回NaN。你手动打开文件并保存的操作,实际上是触发了Excel的全局公式计算,将所有公式的计算结果写入了文件缓存,因此后续Pandas可以正常读取。
可行解决方案
方案1:使用LibreOffice/OpenOffice命令行自动计算并刷新文件缓存(跨平台通用,无需手动操作)
你可以在下载完Excel文件后,调用本地LibreOffice的命令行接口,自动打开文件、计算所有公式、保存并退出,完全模拟手动操作的流程,代码示例:import subprocess import os def refresh_excel_calc(file_path): # 以下为Windows路径,Linux/macOS替换为对应的libreoffice执行文件路径 libreoffice_path = r"C:\Program Files\LibreOffice\program\soffice.exe" subprocess.run([ libreoffice_path, "--headless", "--convert-to", "xlsm", "--outdir", os.path.dirname(file_path), file_path ], capture_output=True)下载完文件后先调用
refresh_excel_calc("./test.xlsm")再用Pandas读取即可。方案2:读取时使用支持公式计算的Python库直接获取值
可以用xlcalculator库直接解析Excel公式并计算结果,不需要依赖外部软件:from xlcalculator import ModelCompiler from xlcalculator.model import Model compiler = ModelCompiler() model = compiler.read_and_parse_archive("./test.xlsm") evaluator = Model(model) # 示例:读取MONITORAMENTO工作表D列第5行的值 value = evaluator.evaluate('MONITORAMENTO!D5')方案3:调整Google Drive上传/下载逻辑,先转换为Google Sheets格式再读取
上传文件时将Excel转换为Google Sheets格式,Google Sheets会自动计算公式结果,读取时直接通过API获取计算后的值,再按需导出为Excel,上传时修改file_metadata,增加转换配置即可:file_metadata = { 'name': 'testes', 'parents':[parentid], 'mimeType': 'application/vnd.google-apps.spreadsheet' # 自动转换为Google Sheets }注意如果你的.xlsm文件包含VBA宏,该格式转换会丢失宏内容,这种场景下不建议使用本方案。
内容的提问来源于stack exchange,提问作者artursouza

