Python读取Excel带公式单元格的值:openpyxl与win32com解决方案

Evan
Evan
发布时间:2026-10-13 | 3人浏览过
原创

本文详解Python读取包含公式的Excel文件时遇到的“None”或“公式字符串”问题。通过对比openpyxl库的data_only参数机制,以及利用win32com调用Excel应用强制计算的方法,提供两种有效获取公式计算结果值的方案,帮助开发者解决数据读取异常。

Excel公式值读取问题背景

在处理Excel文件读取任务时,部分场景需要直接获取单元格中由公式计算得出的最终值。

然而,使用常规的读取方法时,往往无法正确获取数值,返回结果为空。


import os
import xlrd
from xlutils.copy import copy

file_path = os.path.abspath(os.path.dirname(__file__)) # 获取当前文件目录
print(file_path)
root_path = os.path.dirname(file_path)  # 获取文件上级目录
data_path = root_path + '\\data' # 拼接data文件夹地址
data_file = data_path + '\\api.xlsx'  # 拼接excel文件地址
data = xlrd.open_workbook(data_file) # 读取文件
sheet = data.sheet_by_index(0)  # 切换到第一个sheet

def get_excel(row, col):
  """
  excel 单元格读取
  :param row: 
  :param col: 
  :return: 
  """
  rows = sheet.nrows # 获取最大行号
  cols = sheet.ncols # 获取最大列号
  path_name = sheet.cell_value(row, col)  # 获取单元格值
  return rows,cols,path_name

经排查发现,普通的读取方式无法直接解析带公式的单元格内容。此时需要采用

openpyxl库中的load_workbook模块进行针对性处理。

openpyxl读取公式值的机制与局限


from openpyxl import load_workbook
def get_xlrd(self,row,col):
  wb = load_workbook(self.data_file, data_only=True)
  ws = wb.worksheets[0]
  return ws.cell(row,col).value

在使用openpyxl读取包含公式的Excel文件时,常会遭遇两类典型问题。

具体表现为:读取结果要么是“None”,要么是直接返回“公式字符串本身”。


wb = openpyxl.load_workbook('daikuan.xlsx',data_only = True)-------读出来的是 none
#wb = openpyxl.load_workbook('daikuan.xlsx',data_only = False)------------读出来的是 公式本身

针对上述问题,可参考以下解决思路: 若公式是通过代码写入Excel生成的,直接读取通常会返回None。 若公式是手动输入并保存的Excel文件,使用openpyxl读取即可获取公式计算后的结果。 对于代码写入公式的情况,建议手动打开该Excel文件并执行一次保存操作,随后再使用openpyxl读取,即可成功获取公式值。

另一种有效方案是调用win32com.client中的Dispatch模块。执行下方提供的代码后,再进行数据读取,即可正常获取公式计算后的数据或值。

基于win32com的强制计算方案


from win32com.client import Dispatch

def just_open(filename=file_name):
  xlApp = Dispatch("Excel.Application")
  xlApp.Visible = False
  xlBook = xlApp.Workbooks.Open(filename)
  xlBook.Save()
  xlBook.Close()

至此,关于Python读取Excel文件中带公式值的实现方法介绍完毕。如需了解更多Python处理Excel公式的相关内容,欢迎查阅本站过往文章或继续浏览后续教程,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表