Forum: PC-Programmierung Automatische Formatierung von csv Daten


von Hannes (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von glasiger Blechtroll (Gast)


Lesenswert?

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.

von BB84 (Gast)


Lesenswert?

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.

von Hannes (Gast)


Lesenswert?

@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.

von Hannes (Gast)


Lesenswert?

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!

von glasiger Blechtroll (Gast)


Lesenswert?

>@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.

von Udo N. (weinbauer73)


Lesenswert?

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.

von Christopher J. (christopher_j23)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von Hannes (Gast)


Lesenswert?

@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!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Christopher J. (christopher_j23)


Angehängte Dateien:

Lesenswert?

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.

von Hannes (Gast)


Lesenswert?

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!

von Christopher J. (christopher_j23)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.