2016-10-18 4 views
2

Als Teil einer größeren Reihe von Tests muss ich alle Formeln in einer hochgeladenen Excel-Arbeitsmappe extrahieren. Ich muss dann jede Formel in ihre jeweiligen Bereichsreferenzen analysieren und diese Referenzen in eine einfache Datenbank ausgeben. Wenn Zelle A1 beispielsweise eine Formel = B1 + C1 hat, würde meine Datenbank B1 und C1 als referenzierte Zellen aufzeichnen.Schnellste Möglichkeit zum Analysieren aller Excel-Formeln mit Python 3.5

Momentan lese ich Formeln einzeln mit openpyxl und parse sie dann. Das ist für kleinere Arbeitsmappen gut, aber für große Arbeitsmappen kann es sehr langsam sein. Es fühlt sich völlig ineffizient an.

Können Pandas oder ein ähnliches Modul Excel-Formeln schneller extrahieren? Oder gibt es vielleicht eine bessere Möglichkeit, alle Arbeitsmappenformeln zu extrahieren, als sie einzeln zu lesen?

Jeder Rat würde sehr geschätzt werden.

+0

Ja, ich habe eine Suche nach den Fähigkeiten von Pandas gemacht und es scheint, dass es nicht tun kann, was ich will, aber ich habe es nicht oft benutzt und vielleicht etwas verpasst. –

Antwort

1

analysieren Was meinen Sie mit „schneller die Formeln Extrahieren“? Sie werden mit jeder Zelle gespeichert, so dass Sie Zelle für Zelle gehen müssen. Wenn es um das Parsen geht, enthält openpyx einen Tokenizer, den Sie möglicherweise nützlich finden. Theoretisch würde dies ermöglichen, die XML-Arbeitsblattdateien direkt zu lesen und die Knoten nur mit Formeln in ihnen zu analysieren. Sie müssen jedoch auch die von einigen Anwendungen verwendeten "freigegebenen Formeln" verarbeiten. openpyxl konvertiert solche Formeln automatisch in pro-Zelle.

Intern Pandas verlässt sich auf xlrd, um die Dateien zu lesen, so dass die ETL, das Zeug in Pandas zu bekommen, nicht schneller ist, als direkt mit Arbeitsblattobjekten zu arbeiten.

+0

Danke für die Eingaben Charlie. Ich möchte sicherstellen, dass meine Tests so schnell wie möglich ausgeführt werden und manchmal Leistungsprobleme mit großen Tabellen auftreten. Ich nutze den Tokenizer ausgiebig (tolle Arbeit übrigens, sehr praktisch). Ich habe mich nicht allzu sehr damit beschäftigt, wie Pandas funktioniert - aufgrund ihrer Leistung in einer riesigen CSV-Datei, die ich vor einiger Zeit verarbeitet habe, dachte ich, dass sie eine andere Magie haben könnte, durch die sie ihre Geschwindigkeit erhält. Wenn jedoch die Formeln Zelle für Zelle die einzige Möglichkeit sind, dann ist das vielleicht so weit, wie ich es machen kann. –

+1

CSV ist ein viel einfacher zu analysierendes Format. Es ist auch völlig untypisiert. Wenn Sie den Parser von openpyx direkt verwenden können, können Sie den nicht unbeträchtlichen Aufwand beim Erstellen von Zellen vermeiden, beachten Sie jedoch, dass wir die Parser nicht als Teil einer öffentlichen API betrachten. –

0

Sie wissen nicht, über Python, aber eine schnelle Annäherung an das Problem ist:

  • erhalten alle Formeln in R1C1-Modus in ein Array Special
  • -Feed in eine Sammlung/Wörterbuch mit uniques bekommen
  • dann die uniques
+0

Danke für die Antwort. R1C1 funktioniert leider nicht, da die Datenbank teilweise zur Abbildung von Referenzabhängigkeiten verwendet wird. Mein derzeitiger Ansatz liefert ein akzeptables Ergebnis, aber mein Problem besteht in der Optimierung. –

+0

Wie erwarten Sie, die Unikate zu sammeln, ohne die Datei zu analysieren? –

+0

@artifex_knowledge - Sie können in R1C1 sammeln, um Uniques zu erhalten, und dann bei Bedarf in A1 konvertieren. –

Verwandte Themen