我想知道是否有办法从 Excel 文件中读取数据,然后以某种方式使用表格外的 for 循环获取每个学生的特殊考试表。
到目前为止,我们一直在使用类似这样的代码:
Fill the blanks below and answer the question.
\begin{tabular}{|l|l|}
\hline
Name: & E-mail: \\ \hline
Surname: & Student Number: \\ \hline
\end{tabular}
Question: 2+2=?
我们将上述试卷打印 100 次,供 100 名学生的班级使用。现在我想做这样的事情:
\readfile{students.xls}
\forloop{from i=1 to i=100}{
Answer the question below.
\begin{tabular}{|l|l|}
\hline
Name: \cell{A_i} & E-mail: \cell{B_i} \\ \hline
Surname: \cell{C_i} & Student Number: \cell{D_i} \\ \hline
\end{tabular}
Question: 2+2=?
\newpage
}
得到一个100页的.pdf文件,其中每个学生都有一个特殊的页面。
提前致谢。
答案1
您可以使用ods文件包,支持对 OpenDocument 电子表格文件进行操作。您需要使用 LibreOffice 将您的 excel 文件转换为 ODS(Excel 也可以执行此操作,但 LibreOffice 生成的文件更干净)。
Odsfile
提供\includespread
带有keyval接口的命令:
\documentclass{article}
\usepackage{fontspec}
\usepackage{odsfile}
\usepackage{url}
\begin{document}
\includespread[%
file=students.ods,
range=a1:d,
rowtemplate={%
\begin{tabular}{|l|l|}%
\hline%
Name: -{1} & E-mail: -{2}\\ \hline%
Surname: -{3} & Student Number: -{4}\\ \hline%
\end{tabular}%
\endgraf%
Question: $2 + 2 = $ ?
\newpage},
]
\end{document}
file
属性指定电子表格文件,范围指定要处理的范围(列为a
、、等,行有编号,当数字剩余时b
,c
范围的第二部分的默认值为行数)。
rowtemplate
可以指定将对每一行执行的代码,使用 访问列-{column number}
。请注意,我们必须使用\endgraf
而不是段落。
该文件必须使用 进行编译lualatex
。
样本:
答案2
答案3
您可以使用 csvsimple 包(http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/csvsimple/csvsimple.pdf)
以下是这个包的一些功能,我觉得非常有用。文档非常详细
使用给定的数据文件
================= StudentFile.txt=============
name, email, surname, studentnumber
robert, [email protected], roro, 123466
julie, [email protected], juju, 987456
laure,[email protected],lolo, 147852
aline,[email protected],lili,963258
martine,[email protected], titine,258741
===========================================
和乳胶源
\documentclass{article}
\usepackage{csvsimple}
\begin{document}
\csvreader%
{StudentFile.txt}{1=\name,2=\email,3=\surname,4=\studentnumber}%
{
\begin{tabular}{|l|l|}
\hline
Name: \name & E-mail: \email \\ \hline
Surname: \surname & Student Number: \studentnumber \\ \hline
\end{tabular}
\vfill
Questions:
$2+\studentnumber=????$
\vfill
\clearpage
}%
\end{document}
答案4
一种穷人低重量无包装方法,限制为 4 条记录(如果更认真地处理空间删除,可以增加到 9 条记录)。适应个人需求。
\documentclass{article}
% only for self-contained example here
\usepackage{filecontents}
\begin{filecontents*}{StudentFile.txt}
robert, [email protected], roro, 123466
julie, [email protected], juju, 987456
laure,[email protected],lolo, 147852
aline,[email protected],lili,963258
martine,[email protected], titine,258741
\end{filecontents*}
% input stream
\newread\MyFile
\makeatletter
\newcommand*\ParseCSVFile [1]{%
\openin\MyFile #1\relax
{\endlinechar-1\ParseCSVFile@}%
\closein\MyFile
}%
\def\ParseCSVFile@ {%
\ifeof \MyFile
\else
\read \MyFile to \ParseCSVFile@oneline
%debugging
%\typeout{ICI: \ParseCSVFile@oneline}%
\ifx\ParseCSVFile@oneline\par
\else
\ifx\ParseCSVFile@oneline\empty
\else
\expandafter
\ParseCSVFile@DoOneLine\ParseCSVFile@oneline$$$$%
\fi\fi
\expandafter\ParseCSVFile@
\fi
}%
% to be customized as need.
\def\ParseCSVFile@DoOneLine #1#2,#3#4,#5#6,#7#8$$$${%
\begin{tabular}{|l|l|}%
\hline
Name: #1#2& E-mail: #3#4\\
\hline
Surname: #5#6& Student Number: #7#8\\
\hline
\end{tabular}%
\par
Question: $2 + 2 = $ ?
\clearpage
}
\makeatother
\begin{document}
\ParseCSVFile {StudentFile.txt}
\end{document}