将同一封信件寄往多个地址

将同一封信件寄往多个地址

我要将同一封信寄往多个地址。这些地址存储在一个 csv 文档中。到目前为止,我已经创建了一个循环来创建多封信,但我还没有找到一种从 csv 中提取地址的格式。

这是 csv 格式

Name    Address City, State  Zip
Company 1   5555 N 5th St   Townsville, CA  55555
Company 2   5556 N 5th St   Townsville, CA  55556
Company 3   5557 N 5th St   Townsville, CA  55557

这是想法,但我不知道如何调用 csv 中的特定元素

\documentclass[11pt]{letter}
\usepackage{csvsimple}

\usepackage{multido}
\newcommand{\forLoop}[4][1]{\multido{\i=#2+#1}{#3}{#4}}
\begin{document}
\csvreader[head to column names]{sample.csv}{} %

\forLoop[1]{2}{4}
{ 

\begin{letter}{csv[\i\,1]\\csv[\i\,2]\\csv[\i\,3]}
\begin{letter}
\opening{Dear ConAgra Food Supplier:}
\closing{Best Regards,\\[2ex]%
{
\LARGE\calligra Jane Doe}\\[2ex]%
Jane Doe\\Title\\Company\\Phone #
}
\end{letter}
}

\end{document}

答案1

我建议使用datatool包裹(点击图片放大):

在此处输入图片描述

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{sample.csv}
Name, Address, City, State, Zip
Company 1, 5555 N 5th St, Townsville, CA, 55555
Company 2, 5556 N 5th St, Townsville, CA, 55556
Company 3, 5557 N 5th St, Townsville, CA, 55557
\end{filecontents*}

\usepackage{datatool,lipsum}

\pagestyle{empty}
\setlength{\parindent}{0pt}
\begin{document}

\DTLloaddb{sample}{sample.csv}

\DTLforeach{sample}{%
  \Name=Name,\Address=Address,\City=City,\State=State,\Zip=Zip}{%
  \clearpage

  \hfill
  \begin{tabular}{l@{}}
    \today\\[10pt]
    Who from \\
    Street \\
    City, State \\
    Phone: (123) 456-7890 \\
    Email: [email protected]
  \end{tabular}

  \bigskip

  \begin{tabular}{@{}l}
    \Name \\
    \Address \\
    \City \\
    \State~\Zip
  \end{tabular}

  \bigskip

  To whom it may concern,

  \bigskip

  \lipsum[1]

  \bigskip

  Sincerely,

  \bigskip\bigskip\bigskip

  First~Last
}

\end{document}

我会放弃letter文档类,而选择更简单或更直接的类,例如article类。布局易于操作,并且可以轻松使用 循环生成邮件合并样式的多封信件,发送至不同的地址\DTLforeach

答案2

我认为@Werner 使用 给出了一个很好的答案datatool。由于 OP 使用了csvsimple,因此这里将其改编为 ,输出csvsimple相同。只有很少的语法变化。对于此应用程序,datatoolcsvsimple可以相互交换。

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{sample.csv}
Name, Address, City, State, Zip
Company 1, 5555 N 5th St, Townsville, CA, 55555
Company 2, 5556 N 5th St, Townsville, CA, 55556
Company 3, 5557 N 5th St, Townsville, CA, 55557
\end{filecontents*}

\usepackage{csvsimple,lipsum}

\pagestyle{empty}
\setlength{\parindent}{0pt}
\begin{document}

\csvreader[head to column names]{sample.csv}{}{%
  \clearpage

  \hfill
  \begin{tabular}{l@{}}
    \today\\[10pt]
    Who from \\
    Street \\
    City, State \\
    Phone: (123) 456-7890 \\
    Email: [email protected]
  \end{tabular}

  \bigskip

  \begin{tabular}{@{}l}
    \Name \\
    \Address \\
    \City \\
    \State~\Zip
  \end{tabular}

  \bigskip

  To whom it may concern,

  \bigskip

  \lipsum[1]

  \bigskip

  Sincerely,

  \bigskip\bigskip\bigskip

  First~Last
}

\end{document}

答案3

我想建议一种略有不同的方法。下面您可以\mailto在文档的序言中找到一个定义为宏的字母,该字母在文档正文中为每个收件人调用。因此,我不会从 CSV 文件中读取地址,而是将其放入主文档中。您仍然可以从宏调用中了解每封信件是如何生成的。

您可以使用更多宏参数轻松自定义它,以便向信件模板传递更多信息。我正在使用该类,dinbrief但它也适用于任何其他信件类。

\documentclass[11pt]{dinbrief} 

\signature{Dr. Christian Lindig}
\place{Boston}
\nowindowrules

\long\def\mailto#1#2{\begin{letter}{#2}
\subject{Samples for Pop-Fizz}
\opening{#1,}

please find enlclosed the samples that you requested.

\closing{With kind regards}
\end{letter}}


\begin{document}
\mailto{Dear Dr. Drofnuts}{Dr. Drofnuts\\Computer Science Dept\\St. Anford, CA\\USA}
\mailto{Dear Gregor Samsa}{Gregor Samsa\\Ul. Radnice 5\\Prague\\Czech Republic}
\end{document}

在此处输入图片描述

答案4

我建议在外部处理 CSV 文件并将其直接放入信件中,如下所示:

\documentclass[11pt]{letter}

\address{Jane Doe\\Title\\Company\\Phone \#}
\signature{Jane Doe}

\begin{document}

\newcommand\writeletter[4]{
    \begin{letter}{#1 #2\\#3\\#4}
        \opening{Dear #1!}
        Here's a very long text to #1 at #2 in #3.
        \closing{With best regards to #3}
    \end{letter}
}

\writeletter{Company 1}{5555 N 5th St}{Townsville, CA}{55555}
\writeletter{Company 2}{5556 N 5th St}{Townsville, CA}{55556}
\writeletter{Company 3}{5557 N 5th St}{Townsville, CA}{55557}

\end{document}

该示例完全基于德语 Wikibooks 页面中的 \LaTeX 连续字母

相关内容