CSVSimple-Tabelle mit "Auto-Multirow" & Filter & Alphabetischer Sortierung

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Jona

CSVSimple-Tabelle mit "Auto-Multirow" & Filter & Alphabetischer Sortierung

Beitrag von Jona »

Hallo Zusammen,

ich hoffe, bei euch Hilfe für folgende Fragestellung zu bekommen:

Ich würde gerne mittels des CSV-Simple-Packages Tabellen automatisch erstellen lassen, dabei soll eine bestimmte Formatierung & Filterung vorgenommen werden. Als Datenspalten habe ich für ein Minimalbeispiel Name & Nummer gewählt. Umgesetzt habe ich schon eine Filterung nach dem Ersten Buchstaben des Namens. Der zweite Schritt wäre eine, sofern dies irgendwie umsetzbar ist, bei gleichem Namen und unterschiedlicher Nummer eine "Multirow" mit der entsprechenden Größe zu erstellen. (Dies ist für mich nun der wichtigste Schritt). Weiterhin wäre es schön, aber nicht essentiell, wenn sich die Einträge automatisch sortieren würden (aber da hab ich eine Anleitung für). Schließlich wäre es auch noch schön, wenn eine Box, die aufgrund des Filters keinen Inhalt hat, nicht als "Box-Leiche" erscheint. Auch dort weiß ich nicht wie ich rangehen soll.

Dabei habe ich folgendes Minimalbeispiel erstellt, ich hoffe ich habe es genug "entschlackt":

Code: Alles auswählen

\documentclass[paper=a6, fontsize=6pt, headings=small, oneside, automark]{scrreprt}
  \usepackage[left=0.5cm,right=1cm,top=1.cm,bottom=0.5cm]{geometry} 
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} 
\usepackage{multicol}
\usepackage{multirow}
\usepackage[most,many]{tcolorbox}
\usepackage{csvsimple}
\usepackage{xltabular}
\usepackage{xstring}
\newcommand{\NameFilter}[2]{\begin{tcolorbox}[breakable, enhanced, left=0.0mm,right=0.0mm,top=0.0mm, bottom=0mm, boxsep=0.5mm, 
		title=\setlength{\LTpre}{-0.0cm}
		\begin{longtable}{@{}p{4cm}p{1.8cm}@{}}
			Name & Nummer 
		\end{longtable}] % Überschrift		]
		
		\setlength{\LTpre}{-0.0cm}		
		\csvreader[
		separator=semicolon,
		filter test={\StrLeft{\Name}{1}[\firstchar]%
						\IfStrEq{\firstchar}{#2}},
		longtable={@{}p{4cm}p{1.8cm}@{}},
		]
		{#1}%Quelle
		{1=\Name,2=\Nummer}
		{\Name & \Nummer} 
		
	
\end{tcolorbox}
}


\begin{filecontents*}{test.csv}
	name;nummer
	Adam;1245
	Adam;2345
	Adam;5678
	Mueller;2567
	Adam;3456
	Adalbert;5555
	Meier;1111
\end{filecontents*}
\begin{document}
\NameFilter{test.csv}{A}
\NameFilter{test.csv}{C}
\NameFilter{test.csv}{M}
\end{document}

Aussehen soll die Ausgabe dann inetwa so:

Bildschirmfoto von 2020-10-13 21-58-19.png
Bildschirmfoto von 2020-10-13 21-58-19.png (21.85 KiB) 36 mal betrachtet

Sollte das besser mit einem anderen Paket als csvsimple, bsp. mit datatool umzusetzen sein, wäre ich auch für den Hinweis sehr dankbar.

Ich freue mich schon auf eure Hilfe :D
Grüße J

Dateianhänge
document.tex
(1.14 KiB) 1-mal heruntergeladen