Python读取Excel带公式单元格的值:openpyxl与win32com解决方案
本文详解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公式的相关内容,欢迎查阅本站过往文章或继续浏览后续教程,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













