使用openpyxl编辑公式后pandas读取xlsx返回空DataFrame的问题
问题原因与解决方法
原因
- openpyxl默认仅写入公式表达式,不会自动计算公式结果,保存的文件里只有公式字符串,没有计算后的值。而pandas读取xlsx时,默认优先读取单元格的已计算值(而非公式本身),此时因为没有计算结果,就会返回空值,最终形成空DataFrame。
- 手动打开Excel时,软件会自动触发公式计算并保存计算结果,所以再次读取就能正常获取数据。
解决方法
1. 让openpyxl计算公式后保存
使用openpyxl的calculate()方法,在保存文件前触发公式计算,示例代码:
from openpyxl import load_workbook wb = load_workbook("your_file.xlsx", data_only=False) ws = wb.active # 执行公式计算 ws.calculate() wb.save("calculated_file.xlsx")
注意:calculate()依赖openpyxl的公式解析能力,部分复杂公式可能无法正确计算。
2. pandas读取时直接解析公式
修改pandas的读取参数,指定读取公式而非计算值,示例代码:
import pandas as pd df = pd.read_excel("your_file.xlsx", engine="openpyxl", data_only=False)
这种方法得到的是公式字符串而非计算结果,如果需要数值,仍需先完成公式计算。
3. 用win32com模拟手动保存(Windows专属)
调用Excel应用程序打开文件并保存,完美模拟手动操作的效果,支持所有Excel可计算的公式,示例代码:
import win32com.client as win32 excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Open(r"your_file.xlsx") # 强制计算所有公式 wb.RefreshAll() excel.CalculateUntilAsyncQueriesDone() wb.Save() wb.Close() excel.Quit()
需提前安装pywin32库,仅适用于Windows系统。
内容的提问来源于stack exchange,提问作者LinsZ
相关产品推荐
相关产品推荐

