Tabelle aus CSV Datei mit fester Breite

Tabellen und Grafiken erstellen und anordnen


Ricky

Tabelle aus CSV Datei mit fester Breite

Beitrag von Ricky »

Hallo zusammen,

ich möchte gerne mit Hilfe von Informationen aus CSV Dateien in Latex Tabellen erstellen. Die Breite der Tabelle soll dabei fest sein, wobei die Spaltenanzahl variieren kann (im Vorliegenden Minimalbeispiel könnte beispielsweise noch die Information "E-Mail Adresse" hinzukommen).

D.h. die Tabellenbreite wäre dann im Fall von 3 Spalten überdimensioniert. Wie viele Spalten sich noch hinzufügen lassen hängt von dem Text der einzelnen Spalten ab. So wie in diesem Bild dargestellt:

Bild

Hat jemand eine Idee, wie ich dieses Vorhaben umsetzen kann?
\documentclass[11pt,a4paper]{scrartcl}
\usepackage{csvsimple} %Package fuer CSV-Dateien

\begin{filecontents*}{Tabelle.csv}
	Nachname,Vorname,Alter
	Mustermann,Max,30
\end{filecontents*}

\begin{document}
	\csvautotabular{Tabelle.csv}
\end{document}
Vielen Dank im Voraus!

Gruß
Ricky[/img]
Dateianhänge
rickyTabularOrignial.jpg
rickyTabularOrignial.jpg (63.73 KiB) 3505 mal betrachtet
rickyTabularResized.jpg
rickyTabularResized.jpg (41.61 KiB) 3532 mal betrachtet

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

csvsimple bietet viele Möglichkeiten, Tabellen indivivduell zu gestalten. Also auch gerne mal in der Doku lesen. Aus https://tex.stackexchange.com/questions ... -csvsimple habe ich mal drei Varianten zusammengestellt und auf dein Problem abgeändert:
\documentclass[11pt,a4paper]{scrartcl}
\usepackage{csvsimple} %Package fuer CSV-Dateien

\begin{filecontents*}{Tabelle.csv}
   Nachname,Vorname,Alter,E-Mail,Telefon
   Mustermann,Max,30,m.max@web.de,0180/123123
\end{filecontents*}

\begin{document}
\csvreader[tabular=|p{3cm}|p{6cm}|r|p{2.5cm}|l|,
  no head,
  table head=\hline,
  late after line=\\\hline]%
  {Tabelle.csv}{}%
{\csvcoli & \csvcolii & \csvcoliii}%

\bigskip
   \csvloop{
  file=Tabelle.csv,
  no head,column count=4,
  tabular=|p{3cm}|p{6cm}|r|p{2.5cm}|l|,
  table head=\hline,
  command=\csvlinetotablerow,
  late after line=\\\hline
}

\bigskip
\csvreader[tabular=|p{3cm}|p{6cm}|r|p{2.5cm}|l|,
  no head,column count=5,
  table head=\hline,
  late after line=\\\hline]%
  {Tabelle.csv}{}%
{\csvlinetotablerow}%
\end{document}
EDIT: Als Erweiterung könnte man noch ein Tabellenlayout global in einem neuen Befehl festlegen und die "Personentabellen" ganz einfach mittels diesem Befehl und Argument zur Anzahl der Zeilen aufrufen:
\documentclass[11pt,a4paper]{scrartcl}
\usepackage{csvsimple} %Package fuer CSV-Dateien

\begin{filecontents*}{Tabelle.csv}
   Nachname,Vorname,Alter,E-Mail,Telefon
   Mustermann,Max,30,m.max@web.de,0180/123123
\end{filecontents*}

\newcommand{\perstable}[1]{%
\csvreader[tabular=|p{3cm}|p{3cm}|r|p{2.5cm}|l|,
  no head,column count=#1,
  table head=\hline,
  late after line=\\\hline]%
  {Tabelle.csv}{}%
{\csvlinetotablerow}%
}

\begin{document}
\perstable{3}

\bigskip
\perstable{4}

\bigskip
\perstable{5}
\end{document}
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Ricky

Beitrag von Ricky »

Hallo markusv,

vielen Dank für deine Antwort!
Das ist aber leider nicht das, wonach ich gesucht habe. Vielleicht habe ich es schlecht beschrieben, entschuldige.

Ausgangssituation ist folgende:
Auf einer Seite soll eine gewisse Breite für Informationen aus einer CSV-Tabelle zur Verfügung stehen. Wie viele Spalten auf dieser Tabellenbreite eingenommen werden ist variabel. D.h. mal kann eine CSV-Datei zur Verfügung gestellt werden, in welcher 6 Spalten hinterlegt sind und ein anderes mal vielleicht nur 3 Spalten. Die zur Verfügung gestellt Breite soll jedoch immer komplett ausgenutzt werden (So wie in dem Bild, das ich hochgeladen habe). Dabei können die Merkmale der Spalten (und damit Anzahl der verwendeten Zeichen auch variieren)

Ich möchte also nicht für einzelne Spalten eine feste Breite vorgeben, sondern für die gesamte Tabellenbreite, z.B. 12cm. Bei einer CSV-Tabelle mit 3 Spalten bekommt jede Spalte 4cm zur Verfügung und bei einer CSV-Tabelle mit 6 Spalten bekommt jede Spalte 2cm zur Verfügung (bzw. wenn einzelne Spalten aufgrund der Zeichenanzahl eine größere Breite benötigen und manche Spalten eine geringere Breite, soll es so eingeteilt werden, dass es passt).
Natürlich ist man auf die 12cm dann auf eine maximale Zeichenanzahl begrenzt.

Ich hoffe, ich habe nun verständlicher beschrieben, was ich gerne umsetzen möchte? Sollte noch etwas unklar sein schärfe ich auch gerne noch einmal nach.

Vielen Dank und schöne Grüße
Ricky

Gast

Beitrag von Gast »

Es ist ungeschickt Bilder bitte in einer Größe einfügen, dass man anschließend einen Ultrabreit-4K-Monitor benötigt, damit die gesamte Seite auch ohne viel horizontales hin und her Scrollen gelesen werden kann. Außer natürlich man will alle von der Beantwortung abhalten, die nicht gerade entsprechende Hochleistungshardware zur Hand haben.

Also: Bitte verringert die Größe der Bilder vor dem Hochladen auf maximal 700 Pixel in der Breite!!!

Gast

Off-Topic: Bildgröße

Beitrag von Gast »

In http://golatex.de/wie-haenge-ich-ein-bi ... 18411.html werden übrigens aus gutem Grund max. 640x480 Pixel empfohlen!

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

In diesem Falle würde sich natürlich eine Lösung mit tabularx anbieten, hier mit 15cm Breite, damit nichts überlappt:
\documentclass[11pt,a4paper]{scrartcl}
\usepackage{csvsimple} %Package fuer CSV-Dateien
\usepackage{tabularx} %für X-Spalten und tabularx-Umgebung

\begin{filecontents*}{Tabelle.csv}
   Nachname,Vorname,Alter,E-Mail,Telefon
   Mustermann,Max,30,m.max@web.de,0180/123123
\end{filecontents*}

\newcommand{\perstable}[1]{%
\begin{tabularx}{15cm}{|*{#1}{X|}}
\hline
\csvreader[late after line=\\\hline,late after last line=\\\hline,
no head,column count=#1]
  {Tabelle.csv}
  {}
  {\csvlinetotablerow}
\end{tabularx}
}

\begin{document}
\perstable{3}

\bigskip
\perstable{4}

\bigskip
\perstable{5}
\end{document}
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Ricky

Beitrag von Ricky »

Anonymous hat geschrieben:Es ist ungeschickt Bilder bitte in einer Größe einfügen, dass man anschließend einen Ultrabreit-4K-Monitor benötigt, damit die gesamte Seite auch ohne viel horizontales hin und her Scrollen gelesen werden kann. Außer natürlich man will alle von der Beantwortung abhalten, die nicht gerade entsprechende Hochleistungshardware zur Hand haben.

Also: Bitte verringert die Größe der Bilder vor dem Hochladen auf maximal 700 Pixel in der Breite!!!
Entschuldigung, du hast natürlich Recht. Da habe ich zu schnell geschossen und nicht aufgepasst. Hier nochmal das Bild komprimiert, leider kann ich meinen Beitrag nicht editieren:

Bild

@markusv:
Ich glaube das ist genau das, wonach ich gesucht habe. Schaue es mir heute Abend nochmal in Ruhe an und werde mich dann auch in tabularx mal einlesen.
Vielen vielen Dank! :-)

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Ich habe dann mal das Bild in Originalgröße an den OP angehängt. Auf dem goLaTeX-Server ist genug Platz, kein Grund externe Dienste zu nutzen.

Falls es dich interessiert, goLaTeX (und viele andere TeX-verwandte Webseiten) wird durch DANTE e.V. unterstützt (siehe linke Spalte). Auch du kannst Mitglied werden, eine Schnuppermitgliedschaft für ein Jahr kostet nur 15 Euro.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Ricky

Beitrag von Ricky »

ich bins nochmal.
Der Code funktioniert soweit ganz gut. Idealerweise würde ich aber gerne die Anzahl der Spalten nicht fest im LaTeX-Code vorgeben, sondern diese automatisiert auslesen lassen.
Kannst du mir hierbei nochmal helfen @markusv ?

Ricky

Beitrag von Ricky »

Zusätzlich wäre es super, wenn sich die Spaltbreiten nicht alle gleich wären, sondern nur so breit wie der Inhalt. Das was dann noch zu der Gesamtbreite fehlt, soll dann gleichmäßig aufgeteilt werden.

Bsp:
6 Spalten mit 2cm, 2cm, 2.5cm, 3cm, 3.5cm und 4cm Inhalt. Gesamtbreite soll 23cm betragen.
-> Benötigte Gesamtbreite für die 6 Spalten: 17cm.
-> Gewollte Gesamtbreite: 23 cm
-> 23cm - 17cm = 6cm
-> 6cm / 6 Spalten = 1cm auf jede Spalte zusätzlich verteilen.

Antworten