我正在使用 csvreader 进行动态报告。
我想使用 csvreader 函数从特定单元格调用值,例如:
Thank you \csvreader[head to column names, filter={\thecsvinputline=2}]{sample.csv}{}{\csvcolii} \csvreader[head to column names, filter={\thecsvinputline=2}]{sample.csv}{}{\csvcoliii.}
写“谢谢马克·史密斯”
其中 sample.csv 包含例如:
Name,LastName
Mark,Smith
x,y
a,b
如果我这样做,我实际上会得到:“谢谢您,姓氏史密斯”
这些信息不一定位于 csv 文件的同一行......
关于如何修复此问题或者采取不同做法,您有什么想法吗?
谢谢你! :)
答案1
您可以查看 csvsimple 包中的示例https://www.ctan.org/pkg/csvsimple
\csvnames{我的名字}{Name=\surname,LastName=\givenname} \csvreader[我的名字,行后延迟=\\,最后一行后延迟=]% {示例.csv}{}{% 谢谢 \givenname\ \surname\ %出生于 \birthyear\ 并且住在 \address。 }
因此您需要直接使用标题字符串并将其放入变量中,然后就可以轻松使用它。
答案2
这里有一种方法readarray
:
\documentclass{article}
\usepackage{readarray}
\begin{filecontents*}{sample.csv}
Name,LastName
Mark,Smith
x,y
a,b
\end{filecontents*}
\newcommand\fullname[1]{\edef\tmp{\the\numexpr#1+1\relax}%
\sample[\tmp,1] \sample[\tmp,2]}
\begin{document}
\readarraysepchar{,}
\readdef{sample.csv}\sampledata
\readarray\sampledata\sample[,2]
Thank you, \fullname{1}.
Third name is \fullname{3}.
\end{document}
答案3
另一种解决方案是使用datatool
。
\documentclass{article}
\usepackage{datatool}
\begin{filecontents*}{sample.csv}
Name,LastName
Mark,Smith
x,y
a,b
\end{filecontents*}
\DTLloaddb{data}{sample.csv}
\newcommand\fullname[1]{%
\DTLassign{data}{#1}{\dbName=Name,\dbLastName=LastName}%
\dbName~{\scshape\dbLastName}%
}
\begin{document}
Thank you, \fullname{1}.
Third name is \fullname{3}.
\end{document}