将 CSV 导入为长表不起作用

将 CSV 导入为长表不起作用

我尝试实施找到的解决方案这里包含多个列,但对我来说不起作用。它只是将第三列复制了三次。我做错了什么?我知道我不需要为这些数据专门制作一个长表,但这只是一个缩短的版本,我遇到的问题仍然存在。

\begin{filecontents*}{sample_data.csv}
    Col1,Col2,Col3,ColPct
    111,65,64,5\%
    112,30,5,6\%
    113,92,1,8.4\%
    114,47,19,20\%
    115,38,15,1\%
\end{filecontents*}

\documentclass{article}

\usepackage{csvsimple,longtable,booktabs}
\begin{document}

    \csvreader[
    longtable=lrrrr,
    table head=
    \toprule\bfseries Col1 &\bfseries Col2 & \bfseries Col3 & \bfseries ColPct\\ 
    \midrule\endhead\bottomrule\endfoot,
    late after line=\\,
    before reading={\catcode`\#=12},after reading={\catcode`\#=6}
    ]{Data/sample_data.csv}{1=\Item,2=\Item, 3=\Item, 4=\Percentage}
    {\Item & \Item & \Item & \Percentage}
\end{document}

结果

答案1

对要导入的每一列使用唯一的宏,将产生所需的输出:

\begin{filecontents*}{sample_data.csv}
    Col1,Col2,Col3,ColPct
    111,65,64,5\%
    112,30,5,6\%
    113,92,1,8.4\%
    114,47,19,20\%
    115,38,15,1\%
\end{filecontents*}

\documentclass{article}

\usepackage{csvsimple,longtable,booktabs}
\begin{document}

    \csvreader[
    longtable=lrrrr,
    table head=
    \toprule\bfseries Col1 &\bfseries Col2 & \bfseries Col3 & \bfseries ColPct\\ 
    \midrule\endhead\bottomrule\endfoot,
    late after line=\\,
    before reading={\catcode`\#=12},after reading={\catcode`\#=6}
    ]{sample_data.csv}{1=\ColOne, 2=\ColTwo, 3=\ColThree, 4=\Percentage}
    {\ColOne & \ColTwo & \ColThree & \Percentage}
\end{document}

在此处输入图片描述


来自csvsimple 手册

csvsimple包用于处理 CSV 文件。此处理由键值分配控制 [...]

请参阅:简介,第 1 页

\csvreader[<options>]{<file name>}{<assignments>}{<command list>} [...]<assignments>由键值对给出<name>=<macro>。这里,<name>是来自标题行的条目或所寻址列的阿拉伯数字。<macro>是一些获取所寻址列内容的 TEX 宏。[...]

请参阅:用于处理 CSV 文件的宏,第 8 页

如果您对两个不同的列使用相同的宏,则将第一列的内容分配给此宏。通过分配第二列的内容,您可以覆盖第一个分配。这将导致观察到的输出,其中具有相同宏的所有列都包含最后一列的内容。

答案2

顺便说一句,这是一个使用该包的示例datatool。与相比,我发现它的方法更容易理解csvsimple

\begin{filecontents*}{sample_data.csv}
    Col1,Col2,Col3,ColPct
    111,65,64,5\%
    112,30,5,6\%
    113,92,1,8.4\%
    114,47,19,20\%
    115,38,15,1\%
\end{filecontents*}

\documentclass{article}

\usepackage{datatool,longtable,booktabs}

\begin{document}

\DTLloaddb{data}{sample_data.csv}

The table displayed straight up (using longtable).

\DTLdisplaylongdb{data}

The table displayed in a specific format.

\begin{tabular}{l*{3}{r}}
\toprule
\textbf{Col1} &\textbf{Col2} &\textbf{Col3} &\textbf{ColPct}
\DTLforeach*{data}{\1=Col1, \2=Col2, \3=Col3, \4=ColPct}
{%
    \DTLiffirstrow{\\ \midrule}{\\}%
    \1 & \2 & \3 & \4 %
}
\\ \bottomrule
\end{tabular}

\end{document}

相关内容