使用 csvsimple 和 csvreader 复制标题和表头

使用 csvsimple 和 csvreader 复制标题和表头

我的 CSV 文件的前两行有两个标题(第一行有静态关键字,第二行是要显示的标题),我使用 显示它csvreader。我想使用第二行标题作为要显示的表格的标题行。生成的表格的第一页始终有该标题,但我还希望它在我的 第二页上重复longtable

代码:

\def\tablecaption{Table caption}
\csvreader[
longtable={|c|c|c|},
table head=\caption{\tablecaption}
\label{tab:mytable}
\\\hline \endfirsthead
\caption*{Table~\thetable Continued \newline \tablecaption}
\\\hline
%%%%%%%%%% I want to repeat the second row from csv file here %%%%%%%%%%
\\\hline
\endhead,
late after line={\\\hline},
table foot={},
separator=tab,
]
{mytable.csv}
{}
{\csvlinetotablerow}

答案1

您可以使用第一个读取器处理 csv 文件,将扩展的第二行存储到宏中\mysecondline。第二个读取器(表格)可以将其用于重复的标题。

\documentclass[12pt]{article}
\usepackage{csvsimple,filecontents,longtable}

\begin{filecontents*}{mytable.csv}
staticA,staticB,staticC
headA,headB,headC
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
A,B,C
a,b,c
1,2,3
\end{filecontents*}

\begin{document}

\csvreader[
  filter test=\ifnumequal{\thecsvinputline}{2},
]
{mytable.csv}
{}
{\edef\mysecondline{\csvcoli & \csvcolii & \csvcoliii}}


\def\tablecaption{Table caption}
\csvreader[
  longtable={|c|c|c|},
  table head=\caption{\tablecaption}
  \label{tab:mytable}
  \\\hline \endfirsthead
  \caption*{Table~\thetable: Continued \tablecaption}
  \\\hline
  %%%%%%%%%% I want to repeat the second row from csv file here %%%%%%%%%%
  \mysecondline
  \\\hline
  \endhead,
  late after line={\\\hline},
  table foot={},
  %separator=tab,
]
{mytable.csv}
{}
{\csvlinetotablerow}

\end{document}

答案2

因此,根据托马斯的回答,我得到了以下片段:

\def\tablecaption{caption goes here}
\def\tablefile{csv file name goes here.csv}
\def\tablelabel{tab:label-goes-here}
\csvreader[separator=semicolon,filter test=\ifnumequal{\thecsvinputline}{2}]{\tablefile}{}{\edef\mysecondline{\csvcoli & \csvcolii & \csvcoliii & \csvcoliv}}
\csvreader[longtable={|C{3cm}|C{3cm}|C{3cm}|C{4cm}|},
% **** table setup ****
  table head=\caption{\tablecaption}
  \label{\tablelabel} \\\hline \endfirsthead
  \caption*{\raggedleft\hfill Table~\thetable continues. \newline \centering \tablecaption}
  \\\hline \mysecondline \\\hline \endhead,
  late after line={\\\hline}, table foot={}, separator=semicolon,
]{\tablefile}{}{\csvlinetotablerow}

当我想创建一个新表时,我只需要编辑上面的五行(我认为不值得将其包装到宏中)。

相关内容