Python Openpyxl 1.8.5:使用Openpyxl读取在单元格中键入的公式的结果
我正在其中一张Excel表格中打印一些公式:Python Openpyxl 1.8.5:使用Openpyxl读取在单元格中键入的公式的结果,python,openpyxl,Python,Openpyxl,我正在其中一张Excel表格中打印一些公式: wsOld.cell(row = 1, column = 1).value = "=B3=B4" 但我不能将其结果用于实现其他逻辑,如: if((wsOld.cell(row=1, column=1).value)='true'): # copy the 1st row to another sheet 即使当我试图在命令行中打印结果时,我最终也会打印公式: >>> print(wsOld.cell(row=1, col
wsOld.cell(row = 1, column = 1).value = "=B3=B4"
但我不能将其结果用于实现其他逻辑,如:
if((wsOld.cell(row=1, column=1).value)='true'):
# copy the 1st row to another sheet
即使当我试图在命令行中打印结果时,我最终也会打印公式:
>>> print(wsOld.cell(row=1, column=1))
>>> =B3=B4
如何在单元格中获得公式的结果而不是公式本身?openpyxl支持公式或公式的值。打开工作簿时,您可以使用
data\u only
标志选择要打开的工作簿。但是,openpyxl不会也不会计算公式的结果。有一些像pycel这样的库声称可以做到这一点。Openpyxl不支持excel 100%计算公式。它只支持非常基本的公式。如果要计算工作簿中的所有公式,应使用library(仅在MacOS和Windows上支持)。我已使用openpyxl和pandas的组合解决了此问题:
import pandas as pd
import openpyxl
from openpyxl import Workbook , load_workbook
source_file = "Test.xlsx"
# write to file
wb = load_workbook (source_file)
ws = wb.active
ws.title = "hello world"
ws.append ([10,10])
wb.save(source_file)
# read from file
df = pd.read_excel(source_file)
sum_jan = df ["Jan"].sum()
print (sum_jan)
、DataNitro都使用Excel作为使用Python的接口
如果您想使用Python库,可以尝试,然后
我是xlcalculator的项目所有者
xlcalculator使用openpyxl读取Excel文件,并添加将Excel公式转换为Python的功能
使用xlcalculator和Excel文件的示例:
from xlcalculator import ModelCompiler
from xlcalculator import Model
from xlcalculator import Evaluator
filename = r'use_case_01.xlsm'
compiler = ModelCompiler()
new_model = compiler.read_and_parse_archive(filename)
evaluator = Evaluator(new_model)
val1 = evaluator.evaluate('First!A2')
print("value 'evaluated' for First!A2:", val1)
使用xlcalculator和dict的示例
input_dict = {
"B4": 0.95,
"B2": 1000,
"B19": 0.001,
"B20": 4,
# B21
"B22": 1,
"B23": 2,
"B24": 3,
"B25": "=B2*B4",
"B26": 5,
"B27": 6,
"B28": "=B19*B20*B22",
"C22": "=SUM(B22:B28)",
}
from xlcalculator import ModelCompiler
from xlcalculator import Model
from xlcalculator import Evaluator
compiler = ModelCompiler()
my_model = compiler.read_and_parse_dict(input_dict)
evaluator = Evaluator(my_model)
for formula in my_model.formulae:
print("Formula", formula, "evaluates to", evaluator.evaluate(formula))
# cells need a sheet and Sheet1 is default.
evaluator.set_cell_value("Sheet1!B22", 100)
print("Formula B28 now evaluates to", evaluator.evaluate("Sheet1!B28"))
print("Formula C22 now evaluates to", evaluator.evaluate("Sheet1!C22"))
FWIW,如
openpyxl.load_workbook()
中所述,当打开带有data_only=True的工作簿时,得到的值是“上次Excel读取工作表时存储的值”。这依赖于.xls[x/m/…]文件的缓存功能(除了在Microsoft之外,我到处都能找到关于它的文档)。