使用Python openpyxl读取Excel单元格返回公式而非计算值如何解决
问题分析
- 核心原因:调用
load_workbook()加载文件时未指定data_only=True参数,openpyxl默认配置下会返回单元格存储的公式文本,而非公式计算后的结果值。 - 代码笔误:你声明的工作簿对象为
aa,也没有完成工作表对象的赋值,代码中直接使用未定义的b对象,运行时还会触发NameError报错。
解决方案
方法1:直接读取Excel内置的计算缓存
Excel文件会存储上一次打开保存时的公式计算结果缓存,只要你的H2.xlsx此前用Office Excel/WPS等软件打开并正常保存过,就可以用该方法快速读取计算值,修改后代码如下:
from openpyxl import load_workbook # 新增data_only=True参数,指定读取公式计算后的缓存值 wb = load_workbook('H2.xlsx', data_only=True) # 获取Sheet1工作表对象 ws = wb['Sheet1'] print(ws['G82'].value)
注意:如果文件修改公式后没有重新用Excel软件打开保存,该方法可能返回None,无法读取到正确结果
方法2:动态计算公式结果(无缓存依赖)
如果需要脱离Excel保存的缓存,直接在Python端计算得到公式结果,可以使用xlwings库实现,该库会调用本地安装的Excel程序完成公式计算,返回值和Excel界面显示完全一致,示例代码如下:
import xlwings as xw # 后台启动Excel进程,不弹出界面 with xw.App(visible=False, add_book=False) as app: wb = app.books.open('H2.xlsx') ws = wb.sheets['Sheet1'] # 直接读取公式计算后的值 print(ws.range('G82').value) wb.close()
该方法的优势是不依赖文件的缓存状态,公式有变更也能读到正确值,缺点是运行设备需要提前安装Office Excel/WPS软件。
内容的提问来源于stack exchange,提问作者Kamyab Ali
相关产品推荐
相关产品推荐

