簡體   English   中英

"Openpyxl 1.8.5:讀取使用 openpyxl 在單元格中鍵入的公式的結果"

[英]Openpyxl 1.8.5: Reading the result of a formula typed in a cell using openpyxl

我在一張 Excel 表中打印了一些公式:

wsOld.cell(row = 1, column = 1).value = "=B3=B4"

openpyxl 支持公式或公式的值。 您可以在打開工作簿時使用data_only<\/code>標志選擇哪個。 但是,openpyxl 不會也不會計算公式的結果。 有像 pycel 這樣的庫聲稱可以做到這一點。

"

xlwingsPyXll FlyingKoala 、 DataNitro 都使用 Excel 作為使用 Python 的接口。

如果你想使用 Python 庫,你可以嘗試PyCelxlcalculatorFormulasSchedula

我是 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 的示例;

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"))

我已經使用 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)

Openpyxl 不支持 excel 100% 計算公式。 它只支持非常基本的公式。 如果您想計算工作簿中的所有公式,您應該使用xlwings<\/a>庫(僅在 MacOS 和 Windows 上受支持)。

"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM