Saltar al contenido

Openpyxl 1.8.5: Lectura del resultado de una fórmula escrita en una celda usando openpyxl

No olvides que en las ciencias informáticas un problema casi siempere puede tener diversas resoluciones, por lo tanto aquí mostraremos la mejor y más eficiente.

Solución:

openpyxl admite la fórmula o el valor de la fórmula. Puede seleccionar cuál usando el data_only bandera al abrir un libro de trabajo. Sin embargo, openpyxl no calcula ni calculará el resultado de una fórmula. Hay bibliotecas como pycel que pretenden hacer esto.

He resuelto el problema usando una combinación de openpyxl y 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)

xlwings, PyXll FlyingKoala, DataNitro usan Excel como interfaz para usar Python.

Si desea utilizar una biblioteca de Python, puede probar PyCel, xlcalculator, Formulas y Schedula.

Soy el propietario del proyecto de xlcalculator.

xlcalculator usa openpyxl para leer archivos de Excel y agrega funcionalidad que traduce fórmulas de Excel a Python.

Un ejemplo usando xlcalculator con un archivo de 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)

Un ejemplo usando xlcalculator con un 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"))

Nos encantaría que puedieras dar recomendación a este enunciado si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *