2014-04-28 14 views
6

Sto stampando qualche formula in uno dei fogli Excel:Openpyxl 1.8.5: Lettura del risultato di una formula digitato in una cella utilizzando openpyxl

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

Ma non posso usare il suo risultato nell'attuazione qualche altra logica , come:

if((wsOld.cell(row=1, column=1).value)='true'): 
    # copy the 1st row to another sheet 

Anche quando sto cercando di stampare il risultato nella riga di comando, finisco per la stampa della formula:

>>> print(wsOld.cell(row=1, column=1)) 
>>> =B3=B4 

Come posso ottenere il risultato della formula in una cella e non la formula stessa?

risposta

12

openpyxl supporta la formula o il valore della formula. È possibile selezionare quale utilizzare il flag data_only quando si apre una cartella di lavoro. Tuttavia, openpyxl non calcola e non calcola il risultato di una formula. Ci sono biblioteche là fuori come Pycel che pretendono di farlo.

+4

FWIW, come documentato in 'openpyxl.load_workbook()', il valore che si ottiene quando si apre una cartella di lavoro con 'data_only = True 'è" il valore memorizzato l'ultima volta che Excel ha letto il foglio ". Questo si basa su una funzionalità di cache dei file .xls [x/m/...] (su cui trovo documentazione ovunque tranne che in Microsoft). – Tibo

1

Openpyxl non supporta Excel 100% per il calcolo della formula. Supporta solo formule di base. Se si desidera calcolare tutta la formula nella cartella di lavoro, è necessario utilizzare la libreria xlwings.

1

ho risolto il problema utilizzando una combinazione di openpyxl e panda:

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) 
Problemi correlati