2014-03-24 6 views
25

Ich habe echte Probleme damit, da die Funktion cell.value die Formel für die Zelle zurückgibt, und ich muss das Ergebnis extrahieren Excel nach liefert Betriebs.Zugriff auf den realen Wert einer Zelle mit dem OpenPexl-Modul für Python

Vielen Dank.


Ok, ich glaube ich habe einen Weg gefunden; Um auf cell.internal value zugreifen zu können, müssen Sie zuvor das iter_rows() in Ihrem Arbeitsblatt verwenden, was eine Liste von "RawCell" ist.

for row in ws.iter_rows(): 

    for cell in row: 

     print cell.internal_value 

Antwort

4

Verwenden Sie stattdessen cell.internal_value.

+0

schon versucht .. weiß nicht, ob das Merkmal von nicht vorhanden ist wo ich arbeite oder das Modul hat es derzeit nicht implementiert. Ich erhalte die Fehlermeldung: AttributeError: 'Cell' Objekt hat kein Attribut 'internal_value'. Also habe ich mich gefragt, ob es andere Möglichkeiten gibt, dies zu erreichen. – user3455972

+0

@ user3455972, bitte posten Sie Ihren Code irgendwo –

22

Aus dem Code sieht es so aus, als ob Sie den optimierten Reader verwenden: read_only=True. Sie können zwischen dem Extrahieren der Formel und dem Ergebnis wechseln, indem Sie beim Öffnen der Arbeitsmappe das Flag data_only=True verwenden.

internal_value war ein privates Attribut, das sich nur auf den (untypisierten) Wert bezieht, den Excel verwendet, d. Zahlen mit einer Epoche 1900 für Daten im Gegensatz zur Python-Form. Es wurde aus der Bibliothek entfernt, seit diese Frage zuerst gestellt wurde.

+0

Dies funktioniert nicht für mich Ich bekomme einen None-Wert im Gegenzug – Nikshep

+0

@Nikshep, bitte versuchen Sie mit 2.0.5 und senden Sie einen Fehlerbericht, wenn Sie immer noch Probleme haben. –

+0

@CharlieClark Ja aber http://Stackoverflow.com/questions/32772954/how-to-save-in-openpyxl-without-losing-formulae – Pyderman

52

Wie Charlie Clark vorschlagen bereits Sie data_only auf True festlegen können, wenn Sie Ihre Arbeitsmappe laden:

from openpyxl import load_workbook 

wb = load_workbook("file.xlsx", data_only=True) 
sh = wb["Sheet_name"] 
print(sh["x10"].value) 

Viel Glück :)

+0

danke data_only param ist cool – soField

+0

x10 ist was Zelle? – Matthew

+0

'x10' beziehen sich auf die Spalte mit dem Buchstaben 'X' und die Zeile mit der Nummer 10. –