Ich möchte mit Python Dateien aus einem Office / Excel-Dokument hinzufügen und extrahieren. Bisher ist das Hinzufügen von Dingen einfach, aber zum Extrahieren habe ich keine saubere Lösung gefunden.
Um klar zu machen, was ich habe und was nicht, habe ich das kleine Beispiel test.py geschrieben und weiter erklärt.
test.py
%Vor%Für die Vorbereitung (Schritt 0) öffnet es ein Excel-Dokument mit einem Arbeitsblatt, das zuvor erstellt wurde, indem Sie in Excel die Schaltfläche neues Dokument verwenden. In Schritt (1) verwendet es eine API zum Einbetten einer bestimmten Textdatei in das Excel-Dokument. Die Textdatei wurde zuvor mit dem Inhalt "TEST123" mit einem Texteditor erstellt. Anschließend versucht es in Schritt (2) Inhalt von eingebettetem OLE mithilfe der Zwischenablage zurück zu lesen und öffnet ein Meldungsfeld, das den Inhalt von OLE in der Zwischenablage anzeigt. Schließlich (3) schließt das Programm das geöffnete Dokument. Um eine unveränderte Konfiguration beizubehalten, drücken Sie no hier.
Der große Nachteil dieser Lösung ist die Verwendung der Zwischenablage, die jeden Benutzerinhalt in die Zwischenablage schneidet, was ein schlechter Stil in einer produktiven Umgebung ist. Außerdem wird eine undokumentierte Option für die Zwischenablage verwendet.
Eine bessere Lösung wäre es, OLE- oder OLE-Dateien in einem Python-Datencontainer oder in einer Datei meiner Wahl zu speichern. In meinem Beispiel habe ich eine TXT-Datei verwendet, um Dateidaten einfach zu identifizieren. Schließlich verwende ich ZIP für eine All-in-One-Lösung, aber eine TXT-Datei-Lösung wäre ausreichend für Base64-Daten.
Quelle von 0xC004 = 49156: Ссылка
Dieses VBA-Beispiel sieht interessant aus, aber ich habe keine Ahnung von VBA: Eingebettetes OLE-Objekt (Excel-Dokument) als Datei in Excel 2010 im Vergleich zu 2013 speichern
Nun, ich finde Parfaits Lösung ein wenig hackisch (im schlechten Sinne), weil
Also habe ich eine alternative Lösung geschrieben. Das Wesentliche davon ist das Folgende:
Entpacken Sie die .xlsx-Datei (oder jede andere Office-Datei in der neuen XML-basierten (nicht passwortgeschützt) auf einen temporären Pfad.
durchläuft alle .bin-Dateien innerhalb der '/ xxx / embeddings' ('xxx' = 'xl' oder 'word' oder 'ppt') und erstellen Sie ein Wörterbuch, das die .bin enthält temporäre Pfade der Dateien als Schlüssel und die Wörterbücher von Schritt 3 als Werte.
extrahiert Informationen aus der .bin-Datei gemäß dem (nicht sehr gut dokumentiert) Ole Packager Format, und geben Sie die Informationen als zurück ein Wörterbuch. (Ruft die rohen Binärdaten als 'Inhalt' ab, nicht nur von .txt, aber irgendein Dateityp, z.B. .png)
Ich lerne immer noch Python, also ist das nicht perfekt (keine Fehlerüberprüfung, keine Leistungsoptimierung), aber Sie können die Idee davon bekommen. Ich habe es an einigen Beispielen getestet. Hier ist mein Code:
%Vor%Sie können es wie folgt verwenden:
%Vor%Erwägen Sie, das temporäre Windows-Verzeichnis zu verwenden, das die Dateiquelle des Ole-Objekts vorübergehend bei dem Einbetten in Arbeitsmappe speichert. In dieser Lösung wird keine Zwischenablage verwendet, sondern physische Dateien.
Bei diesem Ansatz müssen Sie den Namen des aktuellen Benutzers abrufen und alle Dateien des temporären Verzeichnisses durchlaufen: C: \ Dokumente und Einstellungen \ {Benutzername} \ Lokale Einstellungen \ Temp (Standard) Excel-Dump-Ordner für Windows Vista / 7/8/10). Außerdem wird eine bedingte Suchnamen-Suche mit in
verwendet, die den Basisnamen der Originaldatei enthält, da mehrere Versionen mit Suffixen (1), (2), (3) usw. existieren können, abhängig davon, wie oft das Skript ausgeführt wird. Versuchen Sie sogar eine Regex-Suche hier.
Schließlich verwendet die folgende Routine try...except...finally
block, um die Excel-Objekte unabhängig vom Fehler sauber zu erhalten, gibt aber eine beliebige Ausnahme aus. Beachten Sie, dass dies nur eine Windows-Lösung ist, die eine Textdatei verwendet.
Tkinter-Messagebox