Hallo,
aus Matlab erhalte ich (Mess-)Daten im csv-Format.
Ich möchte daraus nun formatierte Tabellen erstellen und als pdf
speichern. Dabei möchte ich eine definierte Seitengröße, Schriftgröße,
Seitenränder, Spaltenbreite und Zelleneigenschaften (Umrandung,
Zeilenumbruch) haben.
Ich muss ich das regelmäßig mit vielen csv-Datensätzen durchführen.
Die Formatierung soll immer die selbe sein - ich möchte aber nicht immer
alles neu einstellen. Ich brauche eine automatisierte Lösung.
Formatvorlagen in Excel oder OpenOffice Calc verstehe ich nicht
wirklich. Sie sind scheinbar nur im aktiven Dokument verfügbar, lassen
sich nicht als Datei speichern... Wirklich intuitiv ist die Bedienung
auch nicht.
Hat da jemand einen Tipp?
Danke!
Hannes
Excel und Calc dürften über einen Macrorecorder verfügen, mit dem Du
Deine Formatierungsschritte anhand einer Musterdatei aufzeichen und bei
weiteren Dateien in Zukunft wieder abspielen kannst.
Ich empfehl die Speicherung als html, da kriegt man die Daten auch
wieder raus, was bei pdf nicht trivial ist.
Falls es trotzdem pdf sein muss .. ein txt erzeugen und als pdf drucken.
Dh der pdf-konverter ist ein Druckertreiber.
Eine weitere Möglichkeit wäre mit Latex. Ein Script für das übertragen
der Daten in den Code mit anschließendem compilieren. Wäre im Prinzip
nur ein Klick.
Könnte man wahrscheinlich auch direkt aus MATLAB erzeugen.
@Rufus:
Den Makrorekorder habe ich gefunden und ausprobiert. Hat leider nicht
zum Ziel geführt. Alle Eigenschaften des Textes (Schriftgröße,
Schriftart) wurden angepasst.
Nicht aber die Eigenschaften der Zellen (Breite, Umrandung) und die der
Seite (Seitenränder).
Habe mir den Code des Makros mal angesehen. Habe ich leider keine Ahnung
von..
@Blechtroll:
Den Tipp verstehe ich nicht ganz. Ich will die Daten archivieren,
sondern optisch aufbereiten. Die Rohdaten bleiben ja erhalten.
BB84 schrieb:> Eine weitere Möglichkeit wäre mit Latex. Ein Script für das übertragen> der Daten in den Code mit anschließendem compilieren. Wäre im Prinzip> nur ein Klick.> Könnte man wahrscheinlich auch direkt aus MATLAB erzeugen.
Interessant!
>@Blechtroll:
Den Tipp verstehe ich nicht ganz. Ich will die Daten archivieren,
sondern optisch aufbereiten. Die Rohdaten bleiben ja erhalten.
Dann muss ein Graph her, eher keine Tabelle.
Hannes schrieb:> Nicht aber die Eigenschaften der Zellen (Breite, Umrandung) und die der> Seite (Seitenränder).
Das kann der Makrorekorder auch. Ich nutze den, wenn ich mal auf die
Schnelle die passende Funktion nicht finde. Habe schon etliche
Konvertierungsmakros mit Berichtsfunktionen geschrieben.
Ich würde Python dafür nehmen. Als PDF-Writer bietet sich da Reportlab
an. Wenn du willst kannst du deine Messdaten auch noch direkt mit
Matplotlib visualisieren und mit ins PDF packen.
Hannes schrieb:> Ich möchte daraus nun formatierte Tabellen erstellen und als pdf> speichern. Dabei möchte ich eine definierte Seitengröße, Schriftgröße,> Seitenränder, Spaltenbreite und Zelleneigenschaften (Umrandung,> Zeilenumbruch) haben.
Du könntest deine Daten in eine Datenbank (z.B. MSAccess oder was du
hast) schieben und sie über einen Report, den du nach deinen Wünschen
einmal formatiert anlegst, über einen PDF-Drucker ausgeben. Dann hast du
alle Freiheit bei der Formatierung und mußt das nur einmal anlegen.
@Blechtroll: Es sind nicht nur Zahlenwerte in den Daten, sondern auch
Strings.
Die Vorschläge von Wolfgang und der Makrorecorder gehen schon in die
Richtige Richtung. Mit Tex habe ich Erfahrung, das probiere ich heute
mal. Aber auch Reportlab schaue ich mir mal an, das sieht wirklich gut
aus und wenn man es mal für sich eingerichtet hat, lässt es sich sicher
auch vielseitig einsetzen.
Danke Leute!
Innerhalb gewisser (und leider sehr enger) Grenzen kann man Excel auch
dazu bringen, csv-Dateien (wobei das "c" bei deutschem Excel gelogen
ist, es ist schließlich ein Semikolon) nicht ganz stupide zu
interpretieren. Dinge, die als Text verarbeitet werden sollen (wie z.B.
Telephonnummern, die nicht besser werden, wenn man die führenden Nullen
unterschlägt), sollten in Anführungszeichen gesetzt werden:
bla;1234;001234;"001234";sülz
Auch wenn das Trennzeichen in einem Text enthalten sein soll, sind
Anführungszeichen zu verwenden:
bla;1234;001234;"001;234";sülz
Ich habe das mit Reportlab rein interessehalber mal selber probiert. Das
Python-Script ist völlig überkommentiert aber ich weiß nicht wie viel
Ahnung du von Python hast. Wenn man es auf reinen Python-Code reduziert
bleibt jedenfalls nicht mehr viel übrig. Das Skript ist natürlich alles
andere als schön, weil alles relativ statisch ist, wie z.B. Dateinamen.
Jedenfalls liefert das Skript, wenn man die CSV-Datei 5.2.9.dat und
5.2.9.png im gleichen Verzeichnis wie das Skript hat, die datei
5.2.9.pdf.
Die Ausgabe finde ich schon ganz ok, wenn auch noch stark
verbesserungsbedürftig, vor allem bezüglich der Nachkommastellen. Hier
würde sich vermutlich der Umweg über ein Numpy-Float-Array lohnen, aus
dem man dann die benötigte Stringliste erzeugt, wobei man dann z.B. mit
"%.2f" die Nachkommastellen angeben kann.
Auch der Header der CSV fehlt komplett und ein bisschen Platz zwischen
Diagramm und Tabelle könnte auch sein. Da hatte ich jetzt keine Lust
mehr das noch zu implementieren.
Das Diagramm 5.2.9.png ist übrigens auch mit Python aus der CSV
erstellt, allerdings ist der Sourcecode nicht im Skript enthalten.
Für das Skript wird nichts benötigt außer Reportlab selber. Ich habe es
nur mit Python3 getestet und Reportlab über PIP installiert. Wenn du
Windows nutzt, dann ist es vermutlich am einfachsten eine Distribution
wie z.B. Anaconda zu nutzen, da dort ein vernünftiger Paketmanager
mitgeliefert wird und du auch PIP nutzen kannst. Ansonsten wird das
unter Windows schon zum Krampf nur die Library zu installieren.
Falls du mit Python allgemein noch nichts gemacht hast, dann wird das
für dich am Anfang sicher eine Weile Einarbeitungszeit brauchen (war
jedenfalls bei mir so). Ich finde allerdings, dass sich das lohnt weil
man damit extrem flexibel ist. Auch Numpy oder Matplotlib sind meiner
Meinung nach definitiv einen Blick wert.
Wow! Danke!
Ich habe ein paar einfache Python Skripte auf meinem Raspberry
programmiert und dabei auch PIP genutzt. Ist aber eine andere Baustelle.
Aber das sind ja wirklich nur ein paar Zeilen Code. Cool. Ich werds
probieren. Danke für die Mühe Christopher!
Nix zu danken. Hat mich halt selber mal interessiert, da ich in einem
anderen Zusammenhang schonmal über Reportlab gestolpert bin, es aber
noch nie getestet hatte. Wünsche dir frohes gelingen damit.