Holen Sie sich Formel aus Excel-Zelle mit Python Xlrd
Ich port eines Algorithmus aus einem Excel-sheet, um python-code aber ich muss reverse Engineering der Algorithmus der Excel-Datei.
Excel-Blatt ist ziemlich kompliziert, es enthält viele Zellen, in denen gibt es Formeln, die sich auf andere Zellen (, die auch enthält eine Formel oder eine Konstante).
Meine Idee ist es, zu analysieren, mit einem python-Skript die Blatt-Gebäude eine Art Tabelle der Abhängigkeiten zwischen den Zellen, das heißt:
A1 hängt davon ab, B4,C5,E7 die Formel: "=sqrt(B4)+C5*E7"
A2 hängt davon ab, B5,C6 die Formel: "=sin(B5)*C6"
...
Den xlrd python-Modul ermöglicht das Lesen einer XLS-Arbeitsmappe, aber im moment kann ich den Zugriff auf die Wert einer Zelle, nicht die Formel.
Zum Beispiel mit dem folgenden code, den ich bekommen kann, einfach den Wert einer Zelle:
import xlrd
#open the .xls file
xlsname="test.xls"
book = xlrd.open_workbook(xlsname)
#build a dictionary of the names->sheets of the book
sd={}
for s in book.sheets():
sd[s.name]=s
#obtain Sheet "Foglio 1" from sheet names dictionary
sheet=sd["Foglio 1"]
#print value of the cell J141
print sheet.cell(142,9)
Sowieso, Es scheint keine Möglichkeit zu haben, Holen Sie sich die formul aus dem Cell-Objekt zurück durch die .Zelle(...) Methode.
In Dokumentation Sie sagen, dass es möglich ist, um einen string-version der Formel - (in Englisch, weil es keine Informationen über die Funktion name übersetzung gespeichert in der Excel-Datei). Sie sprechen von Formeln (Ausdrücke) in der Namen und Operanden Klassen, sowieso kann ich nicht verstehen, wie man Instanzen dieser Klassen durch die Zelle Klasse-Instanz, müssen Sie enthält.
Können Sie uns empfehlen einen code-Schnipsel ruft die Formel text aus einer Zelle?
InformationsquelleAutor der Frage alexroat | 2011-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
[Dis]Anspruchsteller: ich bin der Autor/maintainer der
xlrd
.In der Dokumentation Verweise zu Formel text über "name" Formeln, Lesen Sie den Abschnitt "Benannte Referenzen, Konstanten, Formeln und Makros" in der Nähe der start des docs. Diese Formeln verknüpft sind Blatt-Breite oder das ganze Buch zu einem Namen; Sie sind nicht im Zusammenhang mit einzelnen Zellen. Beispiele:
PI
Karten zu=22/7
SALES
Karten zu=Mktng!$A$2:$Z$99
. Der name-Formel decompiler geschrieben wurde, zur Unterstützung der Inspektion der einfacheren und/oder häufigsten Verwendungen von definierten Namen.Formeln im Allgemeinen sind von mehreren Arten: Zelle, geteilt, und array (alle im Zusammenhang mit einer Zelle direkt oder indirekt), name, Datenüberprüfung und bedingte Formatierung.
Dekompilierung der Allgemeinen Formeln aus der bytecode-zu-text ist ein "work-in-progress", Sie langsam. Beachten Sie, dass angenommen, dass es zur Verfügung, Sie müssten dann analysieren Sie den text Formel zu extrahieren, werden die Zellbezüge. Parsen von Excel-Formeln richtig ist keine leichte Aufgabe; wie bei HTML, mit regexes einfach aussieht, aber nicht funktioniert. Es wäre besser, extrahieren Sie die Referenzen direkt aus der Formel-bytecode.
Beachten Sie auch, dass die Zell-basierte Formeln beziehen sich auf Namen, und Namen können Formeln beziehen sich sowohl auf Zellen und andere Namen. Es wäre also notwendig, zu extrahieren, die sowohl die Zelle mit dem Namen Verweise von sowohl cell-based und name-Formeln. Es kann hilfreich sein, um Sie mit Informationen zu freigegebenen Formeln zur Verfügung; ansonsten haben analysiert die folgenden:
würden Sie brauchen, um Rückschlüsse auf die ähnlichkeit zwischen den
B3:B60
Formeln selbst.In jedem Fall, keines der oben genannten ist wahrscheinlich in absehbarer Zeit --
xlrd
Prioritäten woanders liegen.InformationsquelleAutor der Antwort John Machin
Update: ich habe gegangen und implementiert eine kleine Bibliothek zu tun genau das, was Sie beschreiben: extrahieren die Zellen & Abhängigkeiten aus einem Excel-Arbeitsblatt, und konvertieren Sie Sie zu python-code. Code ist auf githubpatches willkommen 🙂
Nur hinzuzufügen, dass man immer mit excel interagieren mit win32com (nicht sehr schnell, aber es funktioniert). Dies erlaubt Ihnen, um die Formel. Ein Tutorials können hier gefunden werden und Angaben finden Siein diesem Kapitel [zwischengespeicherte Kopie].
Im wesentlichen nur:
Als für den Aufbau einer Tabelle von Zelle Abhängigkeiten, eine heikle Sache ist das Parsen von excel-Ausdrücke. Wenn ich mich richtig erinnere die Trace-code, den Sie erwähnt nicht immer alles richtig mache. Die beste, die ich gesehen habe, ist der Algorithmus von E. W. Bachtalvon denen eine python-Implementierung vorhanden ist, die gut funktioniert.
InformationsquelleAutor der Antwort dgorissen
Also ich weiß, dass dies ein sehr Alter post, aber ich fand einen guten Weg, um die Formeln alle Blätter in einer Arbeitsmappe als auch mit der neu erstellten Arbeitsmappe behält alle Formatierungen.
Erste Schritt ist das speichern einer Kopie Ihrer .xlsx-Datei als .xls
-- Verwenden .xls-Dateinamen in den code unten
Mit Python 2.7
Struktur des Wörterbuchs "sheet_formulas'
Beispiel Ergebnisse:
InformationsquelleAutor der Antwort mkultra
Es scheint, dass es unmöglich ist, jetzt zu tun, was Sie wollen mit xlrd. Sie können einen Blick auf dieser Beitrag für die ausführliche Beschreibung, warum es so schwierig ist, die Funktionalität implementieren, die Sie benötigen.
Beachten Sie, dass das Dritte team macht einen tollen job für die Unterstützung durch die python-excel-google-Gruppe.
InformationsquelleAutor der Antwort Steve
Ich weiß, dieser post ist ein wenig spät, aber es ist ein Vorschlag, der bisher nicht abgedeckt hier. Schneiden Sie alle Einträge aus der Tabelle und füge mit " Inhalte einfügen (OpenOffice). Diese konvertiert die Formeln zu zahlen, so gibt es keine Notwendigkeit für zusätzliche Programmierung und dies ist eine angemessene Lösung für kleine Arbeitsmappen.
InformationsquelleAutor der Antwort Erik