合计列在 Excel 里显示 1280.50,用 data_only=True 读出来是 None,3000 行全是空,换成 data_only=False 只能拿到字符串 =SUM(F2:F9)。乍看像缓存或者权限的锅,追下去往往不是。

wb = load_workbook(path, data_only=True)
print(wb.active['F10'].value)
# 空值说明文件没有计算缓存 先重算再读

追下去是这么回事:data_only 读的是 Excel 上次计算后写进文件的缓存值,程序生成的工作簿没经过 Excel 计算,缓存区是空的。文件另存过但没重算,同样读不到数字。

「openpyxl 公式空值」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。

具体做法是,先用 Excel 或 LibreOffice 打开并保存一次 让它把计算结果写进缓存;服务端固定用无头 LibreOffice 重算后再解析 不要依赖人工操作;读取时同时拿公式和缓存值 缓存为空就标记这一行待重算。

验收就看一点,重算后的文件 F10 读出 1280.5,与 Excel 界面显示一致,3000 行合计列不再出现 None。

作者 9823189