2017-11-29 5 views
0

Ich schrieb ein Tool, das Daten aus einer großen DB extrahiert und es in einer Excel-Datei zusammen mit (bedingten) Formatierung zur Verbesserung der Lesbarkeit ausgibt. Dazu benutze ich Python mit openpyxl auf einem Linux-Rechner. Es funktioniert gut, aber dieses Paket ist eher langsam für das Schreiben von Excel.Embed CSV in Excel und importieren Sie die Daten

Es scheint viel schneller zu sein, die Tabelle als (komprimiertes) csv auszugeben, das in Excel zu importieren und die Formatierung dort mit einem Makro/vba anzuwenden.

Um den Prozess zu automatisieren, möchte ich eine leere Excel-Datei erstellen, die mit dem erforderlichen VBA vorinstalliert ist, um die Formatierung durchzuführen; eine Vorlage. Bei jedem Datenabzug werden die Daten in die Excel-Datei eingebettet (komprimiert mit deflate) und beim Öffnen des Dokuments in die Arbeitsmappe geladen (oder mithilfe einer Schaltfläche "LOAD", um Makrosicherheitsaspekte zu umgehen).

jedoch nur einige Datei in die Excel-Datei Hinzufügen löst einen Fehler, wenn sie geöffnet:

wir ein Problem mit einigen Inhalten in ‚Werkmap1_test_embed.xlsx‘ gefunden. Willst du, dass wir versuchen, so viel wie möglich zu erholen? Wenn Sie der Quelle dieser Arbeitsmappe vertrauen, klicken Sie auf Ja.

Durch Klicken Yes die Datei öffnet und zeigt einige Tracing-Informationen als XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> 
    <logFileName>Repair Result to Werkmap1_OLE_Word0.xml</logFileName> 
    <summary>Errors were detected in file '/Users/joostk/mnt/cluster/Werkmap1_OLE_Word.xlsx'</summary> 
    <additionalInfo> 
     <info>Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.</info> 
    </additionalInfo> 
</recoveryLog> 

Ist es möglich, dies zu vermeiden? Wie würde ich eine Datei in den Excel-ZIP einbetten? Muss ich eine Dateitabelle aktualisieren (die ich nicht einfach archivieren konnte).

Wenn das erledigt ist, möchte ich die Daten importieren. Kann ich auf Dateien im Excel-ZIP von VBA aus zugreifen? Ich denke nicht, und ich muss die Daten auf einen temporären Pfad extrahieren und von dort laden.

Vielen Dank für das Teilen Sie Ihre Gedanken:

Ich habe diese hilfreichen Antworten an andere Stelle zu laden ZIP und Klartext gefunden!

+0

was ist der volle Fehler von "Excel fand unlesbaren Inhalt ..."?Zweitens, wenn Sie die Excel-Datei öffnen, wird sie im "wiederhergestellten" Modus geöffnet? Zu guter Letzt, ist der VBA-Code das, was die Daten unter Verwendung von Named Ranges liefert/schreibt? – MattR

+0

Danke @MattR. Ich habe die vollständige Fehlermeldung eingefügt. Beachten Sie, dass ich Office 2016 für Mac verwende, es sollte aber auch (oder zumindest) für Office für Windows funktionieren. Ich habe noch keinen VBA-Code geschrieben. Aber es wird wahrscheinlich nur die CSV als Tabelle ausgeben, nicht mit benannten Bereichen. –

Antwort

0

so meine "Antwort" hier ist, dass dies durch benannte Bereiche oder eine zugrunde liegende Tabelle oder eine eingebettete Abfrage/Verbindung verursacht wird. Wenn Sie die Manipulation dieser Datei starten, werden Sie den Fehler erhalten, die Sie sprechen:

enter image description here

Es in die Datei keinen Schaden, wenn Sie auf „Ja“ und offen. Excel wird dies im Reparierten Modus öffnen, in dem Sie die Datei erneut speichern müssen.

Die Art, wie ich das getan habe, ist, die "reparierte" Datei in Python erneut zu lesen und sie als eine andere Datei zu speichern oder sie zu ersetzen. Im Wesentlichen machen Sie einen zusätzlichen Schritt, um die Daten erneut in den Speicher einzulesen und in eine neue Datei zu schreiben. Der Fehler wird verschwinden. Testen Sie diese Methode wie immer vor der Bereitstellung in der Produktion, um sicherzustellen, dass keine Datensätze verloren gehen. Die Art, wie ich es löse ist mit zwei Zeilen pandas.

import pandas as pd 
repair = pd.read_excel('PATH_TO_REPAIR_FILE') 
new_file = repair.to_excel('PATH_TO_WHERE_NEW_FILE_GOES') 
+0

Danke nochmal @MattR. Leider hat dies nicht funktioniert, da ich die Daten in eine CSV-Datei schreiben möchte, die mit einem externen ZIP-Programm in das Excel-Archiv eingefügt wird. Die eingebettete CSV geht beim Lesen und Schreiben der Excel-Daten mit Pandas (great package btw) verloren, da openpyx diese zusätzlichen Dateien nicht berücksichtigt. Ich werde meine Frage aktualisieren, um dies aufzuklären. –

Verwandte Themen