Exercise 10: Mail Merging using the scrlttr2 Class (Solution)
This is a solution to Exercise 10. You need the sample files people.csv and country-codes.csv. Alternatively, if you want to use data from the samples SQL database, remember to use datatooltk to import the data to a .dbtex file and load it using \DTLloaddbtex as described in Loading Data From a .dbtex File.
\documentclass[12pt,parskip=full]{scrlttr2} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{graphicx} \usepackage[british]{babel} \usepackage{datatool} \newcommand{\ifcsbool}[3]{% \ifboolexpr { test{\ifdefstring{#1}{true}} or test{\ifdefstring{#1}{1}} } {#2}{#3}% } \DTLloaddb{people}{people.csv} \DTLloaddb{countries}{country-codes.csv} \KOMAoption{subject}{afteropening,right,underlined,titled} \KOMAoptions{backaddress=false,foldmarks=false,fromalign=right,locfield=wide} \setkomavar{signature}{Mr Big Head, Managing Director} \setkomavar{subject}{A sample letter} \setkomavar{fromaddress}{University of Somewhere\\Some City\\AB3 4YZ} \setkomavar{fromurl}{www.somewhere.ac.uk} \setkomavar{location}{Secret Lab of Experimental Stuff\\Gov.\ Grant No.~1234} \setkomavar{fromphone}{0123456789} \setkomavar{fromemail}{big.head@somewhere.ac.uk} \KOMAoption{fromlogo}{true} \setkomavar{fromlogo}{\includegraphics[width=2cm]{dummy-logo}} \begin{document} \DTLforeach*{people}% data {% assignments \Id=id,% \Surname=surname,% \Forenames=forenames,% \Title=title,% \AddressI=address1,% \AddressII=address2,% \Town=town,% \County=county,% \Postcode=postcode,% \CountryCode=country,% \Subscribed=subscribed% } {% body \ifcsbool{\Subscribed} {% \xDTLassignfirstmatch{countries}{code}{\CountryCode}{\CountryName=name} \begin{letter}{% \DTLifnullorempty{\Title}{}{\Title\ }\Forenames\ \Surname\\% \AddressI\\ \DTLifnullorempty{\AddressII}{}{\AddressII\\}% \Town\\% \DTLifnullorempty{\County}{}{\County\\}% \Postcode\ifdefstring{\CountryCode}{gb}{}{\\\CountryName}} \setkomavar{myref}{ABC/123} \setkomavar{customer}{\Id} \opening{Dear \DTLifnullorempty{\Title}{\Forenames}{\Title} \Surname} This is an imaginary letter. This is the second paragraph of the letter. \closing{Yours sincerely} \ps PS: this is a postscript. \encl{Photocopy of something interesting\\ Photocopy of something rather dull} \cc{Prof Important Person\\Dr Bor Ing} \end{letter} }{}% } \end{document}Another possibility is to use the optional argument of \DTLforeach* so that it excludes entries where the subscribed field isn't equal to 1 like this:
\documentclass[12pt,parskip=full]{scrlttr2} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{graphicx} \usepackage[british]{babel} \usepackage{datatool} \DTLloaddb{people}{people.csv} \DTLloaddb{countries}{country-codes.csv} \KOMAoption{subject}{afteropening,right,underlined,titled} \KOMAoptions{backaddress=false,foldmarks=false,fromalign=right,locfield=wide} \setkomavar{signature}{Mr Big Head, Managing Director} \setkomavar{subject}{A sample letter} \setkomavar{fromaddress}{University of Somewhere\\Some City\\AB3 4YZ} \setkomavar{fromurl}{www.somewhere.ac.uk} \setkomavar{location}{Secret Lab of Experimental Stuff\\Gov.\ Grant No.~1234} \setkomavar{fromphone}{0123456789} \setkomavar{fromemail}{big.head@somewhere.ac.uk} \KOMAoption{fromlogo}{true} \setkomavar{fromlogo}{\includegraphics[width=2cm]{dummy-logo}} \begin{document} \DTLforeach*[\equal{\Subscribed}{1}]{people}% data {% assignments \Id=id,% \Surname=surname,% \Forenames=forenames,% \Title=title,% \AddressI=address1,% \AddressII=address2,% \Town=town,% \County=county,% \Postcode=postcode,% \CountryCode=country,% \Subscribed=subscribed% } {% body \xDTLassignfirstmatch{countries}{code}{\CountryCode}{\CountryName=name} \begin{letter}{% \DTLifnullorempty{\Title}{}{\Title\ }\Forenames\ \Surname\\% \AddressI\\ \DTLifnullorempty{\AddressII}{}{\AddressII\\}% \Town\\% \DTLifnullorempty{\County}{}{\County\\}% \Postcode\ifdefstring{\CountryCode}{gb}{}{\\\CountryName}} \setkomavar{myref}{ABC/123} \setkomavar{customer}{\Id} \opening{Dear \DTLifnullorempty{\Title}{\Forenames}{\Title} \Surname} This is an imaginary letter. This is the second paragraph of the letter. \closing{Yours sincerely} \ps PS: this is a postscript. \encl{Photocopy of something interesting\\ Photocopy of something rather dull} \cc{Prof Important Person\\Dr Bor Ing} \end{letter} } \end{document}
Download mail-merging-scrlttr2.tex or mail-merging-scrlttr2.pdf.