Können Pandas Lesen und ändern einer einzigen Excel-Datei, Arbeitsblatt (Registerkarte) verändern, ohne den rest der Datei?
Viele Tabellen Formeln und Formatierungen, die Python tools zum Lesen und schreiben von Excel-Dateien nicht originalgetreu zu reproduzieren. Das bedeutet, dass jede Datei, die ich erstellen möchten programmgesteuert muss etwas sein, was ich im Grunde erstellen Sie von Grund auf neu, und klicken Sie dann andere Excel-Dateien (mit der oben erwähnten Komplexität) haben, damit Sie auf die Datei (die erstellt eine Vielzahl von anderen dependency-Probleme).
Mein Verständnis der Excel-Datei "tabs" ist, dass Sie eigentlich nur eine Sammlung von XML-Dateien. Nun, ist es möglich, pandas (oder eines der zugrunde liegenden lese - /schreib-Motoren wie xlsxwriter oder openpyxl zu ändern, einfach auf eine der Registerkarten, so dass andere tabs (mit mehr böse Sachen drin) intakt?
EDIT: ich werde versuchen, dies weiter zu artikulieren, das problem mit einem Beispiel.
- Excel-Sheet test.xlsx hat vier Registerkarten (auch als Arbeitsblätter): Tabelle1, Tabelle2, Tabelle3, Tabelle4
- Ich lese Tabelle3 in einen DataFrame (nennen wir es mal df) mit pandas.read_excel()
- Tabelle1 und Tabelle2 enthalten Formeln, Grafiken, und verschiedene Formatierungen, die weder openpyxl noch xlrd kann erfolgreich analysieren und Tabelle4 enthält andere Daten. Ich will nicht zu berühren Sie die Registerkarten auf alle.
- Tabelle2 hat tatsächlich einige Verweise auf Zellen in Tabelle3
- Ich einige änderungen an df und jetzt schreiben wollen, es zurück zu Tabelle3, wobei die anderen Blätter unberührt (und die Referenzen aus anderen Arbeitsblättern in der Arbeitsmappe intakt)
Kann ich das machen und wenn ja, wie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich eine ähnliche Frage in Bezug auf das zusammenspiel zwischen excel und python (insbesondere pandas), und ich bezog diese Frage.
Dank ein paar Tipps von stackoverflow-community, ich habe ein Paket gefunden namens xlwings das scheint zu decken, eine Menge von Funktionalitäten HaPsantran erforderlich.
Zur Nutzung der OP ' s Beispiel:
Arbeiten mit einer vorhandenen excel-Datei, können Sie löschen einen Anker, der in dem Daten block (Tabelle3), die Sie importieren möchten pandas, indem Sie Sie in excel und tun:
wb = Workbook(Existing_file)
df = Range(Anchor).table.value
getestet, dass diese Umsetzung nicht mildern vorhandene Formel in die excel-Datei
Lassen Sie mich wissen, ob dies Ihr problem löst, und wenn es etwas gibt, dem ich helfen kann.
Großes Lob an die Entwickler xlwings, Sie machte dies möglich.
Unten ist ein update zu meiner früheren Antwort nach der Frage von @jamzsabb, und zu reflektieren eine veränderte API nach xlwings aktualisiert >= 0.9.0.
Ich bin 90% sicher die Antwort zu "kann
pandas
tun" ist keine. Sie eine negative ist hart, weil es immer sein könnte, etwas schlau, dass ich es verpasst habe, aber hier ist so ein Fall:Schnittstelle-Motoren sind
xlrd/xlwt/xlutils
,openpyxl
, undxlsxwriter
. Keiner wird die Arbeit für Ihre Zwecke, wiexlrd/wt
unterstützen nicht alle Formeln,xlsxwriter
nicht ändern können bestehendexlsx
Dateien, undopenpyxl
verliert, Bilder und Diagramme.Da brauche ich oft, um dies zu tun, ich habe nur schreiben, einfache Ausgabe in eine separate Datei und dann den Aufruf der win32api direkt zum kopieren der Daten zwischen Arbeitsmappen unter Beibehaltung aller meiner Kollegin glänzende zahlen. Es ist ärgerlich, weil es bedeutet, dass ich es zu tun habe, die unter Windows anstelle von *nix, aber es funktioniert.
Wenn Sie unter Windows arbeiten, Sie könnten etwas ähnliches tun. (Ich Frage mich, ob es sinnvoll, einen einheitlichen "insert" - option, mit diesem Ansatz Menschen zu helfen, in dieser situation, oder sollten wir einfach post ein Rezept.)
P. S.: Dieses problem hat mich geärgert genug, von Zeit zu Zeit, dass ich gedacht habe, lernen Sie genug von den modernen Excel-format um Unterstützung für diese zu einer der Bibliotheken.
P. P. S.: Aber da ignorieren Dinge, an die man nicht Umgang mit und Rückgabe unverändert scheint einfach genug, die Tatsache, dass niemand scheint zu unterstützen, es macht mich denke, es gibt einige Kopfschmerzen, und wo Redmond ' s beteiligt ist, bin ich bereit, es zu glauben. @john-machin möchte die details wissen, wenn er über..
xlwings
ist, indem ein wrapper um pywin32 auf Windows und appscript auf Mac, um eine voll cross-Plattform-kompatible Lösung, die auch arbeiten, um ein paar von pywin32 seine Grenzen.Ich bin das hinzufügen einer Antwort, die verwendet openpyxl. Ab version 2.5 können Sie erhalten charts in vorhandene Dateien (weitere Einzelheiten für die Ausgabe zur Verfügung stehen hier).
Zu Demonstrationszwecken erstelle ich eine xlsx Datei mit pandas nach den OPs Richtlinien. Die Registerkarte mit dem Namen 'Tabelle2' hat Formeln, die Referenz 'Tabelle3' und enthält ein Diagramm.
Erwartet test.xlsx nach ausführen des Codes oben:
Wenn wir dann führen Sie den code unten, mit openpyxl, können wir die Daten ändern, die in 'Tabelle3', während die Erhaltung Formeln und das Diagramm in "Tabelle2" und die aktualisierten Daten werden nun in diese Datei.
Erwartet test.xlsx nach dem ausführen der zweite code-block:
Soweit ich weiß, Pandas macht das nicht von selbst.
Schrieb ich einige kleine utility library pandasxltable (basierend auf openpyxl) zur Erleichterung der Interaktion zwischen einer excel-Vorlage und pandas Daten-frames. Die Bibliothek ermöglicht es Ihnen, abrufen als Daten-frame und aktualisieren von Excel-Daten-Tabellen (nicht wirklich eine Registerkarte, aber ein Teil davon)von dataframe.
wenn du redest 'Blätter' als 'tabs', dann ist es möglich, ändern Sie einfach auf eine der Registerkarten, indem Sie auf die Besondere Verwendung der
parse(sheet_name)
Funktion.ein Beispiel ist hier:
Das Lesen einer Excel-Datei in python mit pandas
zurück zu schreiben, um excel -, (während die Kontrolle der Blätter) verwenden Sie die
to_excel
Funktion, hier:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html