导入不带标题的 CSV 数据

导入不带标题的 CSV 数据

我尝试将 CSV 数据导入表格。CSV 文件没有标题,我想在不编辑 CSV 文件的情况下在表格中包含标题。我该怎么做?

以下是基于我迄今为止的方法的 MWE:

\documentclass{article}

\usepackage{csvsimple}
\usepackage{booktabs}

\begin{filecontents*}[overwrite]{test.csv}
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
\end{filecontents*}

\begin{document}
    \section*{Table with 12 columns}
    \csvreader[no head,
                tabular = *{12}{c}
                table head = \toprule\bfseries  Col a & \bfseries  Col b & \bfseries  Col c & \bfseries  Col d & \bfseries  Col e & \bfseries  Col f & \bfseries  Col g & \bfseries  Col h & \bfseries  Col i & \bfseries  Col j & \bfseries  Col k & \bfseries  Col l\\\midrule,
                table foot = \bottomrule]
                {test.csv}
                {1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli,10=\colj,11=\colk,12=\coll}
                {\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli & \colj & \colk & \coll}

    \section*{Table with 9 columns}
    \csvreader[no head,
                tabular = *{9}{c}
                table head = \toprule \bfseries  Col 1& \bfseries  Col 2& \bfseries  Col 3& \bfseries  Col 4& \bfseries  Col 5& \bfseries  Col 6& \bfseries  Col 7& \bfseries  Col 8& \bfseries  Col 9\\\midrule,
                table foot = \bottomrule]
                {test.csv}
                {1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli}
                {\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli}
\end{document}

这是错误的输出:

错误输出

另外,您可能会注意到,如果我导入 9 列,则所有列都会被导入。但是,如果我导入所有 12 列,则只有 10 列会被导入。如何修复此问题?

答案1

只需添加缺失的逗号(tabular = *{12}{c},)并使用最新版本:cvsimple-l3

添加geometry以更改边距。否则表格将溢出页面。

b

\documentclass{article}

\usepackage{csvsimple-l3} % new version

\usepackage{booktabs}

\usepackage[left=3.00cm, right=3.00cm, top=4.00cm, bottom=3.00cm]{geometry}% to change the margins

\begin{filecontents*}[overwrite]{test.csv}
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
\end{filecontents*}

\begin{document}
    \section*{Table with 12 columns}
    \csvreader[no head,
    tabular = *{12}{c}, %<<<<<<<<<<<<<<<<<<
    table head = \toprule\bfseries  Col a & \bfseries  Col b & \bfseries  Col c & \bfseries  Col d & \bfseries  Col e & \bfseries  Col f & \bfseries  Col g & \bfseries  Col h & \bfseries  Col i & \bfseries  Col j & \bfseries  Col k & \bfseries  Col l\\\midrule,
    table foot = \bottomrule]
    {test.csv}
    {1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli,10=\colj,11=\colk,12=\coll}
    {\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli & \colj & \colk & \coll}
    
    \section*{Table with 9 columns}
    \csvreader[no head,
    tabular = *{9}{c}, %<<<<<<<<<<<<<<<<<<
    table head = \toprule \bfseries  Col 1& \bfseries  Col 2& \bfseries  Col 3& \bfseries  Col 4& \bfseries  Col 5& \bfseries  Col 6& \bfseries  Col 7& \bfseries  Col 8& \bfseries  Col 9\\\midrule,
    table foot = \bottomrule]
    {test.csv}
    {1=\cola,2=\colb,3=\colc,4=\cold,5=\cole,6=\colf,7=\colg,8=\colh,9=\coli}
    {\cola & \colb & \colc & \cold & \cole & \colf & \colg & \colh & \coli}
        
    
\end{document}

答案2

不确定你这里是否真的有问题。也许我忽略了什么。

(您的 MWE 被破坏了,因为 CSV 的生成实际上不是 MWE 的一部分; test.csv它只是一个先决条件文件)

无论如何,回顾一下一些工作示例:

参考(示例等)https://github.com/TFS/csvsimple/blob/master/doc/latex/csvsimple/csvsimple-l3.tex

关于你的问题,我想到了这一点:

我已将您的 MWE 简化为一个非常小的工作示例:

一、前提条件:

$ cat > test.csv
1, 2
3, 4
5, 6
^D

然后是 LaTeX:

\documentclass{article}

\usepackage{csvsimple}
\usepackage{booktabs}

\begin{document}

    \section*{Table with 2 columns}
    \csvreader[no head,
                tabular = {cc},
                table head = \toprule\bfseries  Col a & \bfseries  Col b \\ \midrule,
                table foot = \bottomrule]
                {test.csv}{%
                1=\cola, 2=\colb
                } { \cola & \colb }
\end{document}

做了:

$ latex mwe.tex

结果包含列标题Col aCol b您想要的内容。

我个人不会将列标题与数据分开,但这是一个与数据和描述数据的标题的一致性有关的样式问题。无论如何,这与您的问题无关。

我认为你没问题。只需重新检查一下你的结果。为了简洁起见,我将其缩减为两列。真正的缺陷似乎是使用:

tabular = *{12}{c}

我尝试过:tabular = *{2}{c}仅针对 two 并收到数组 arg 中非法字符的错误。将其更改为{cc}。编辑您的以适应。

相关内容