Ich würde im Beispiel anregen, die Zeilen nicht per Befehl `\row` in die Tabelle zu schreiben, sondern direkt als Tabellenzeilen. Befehle zur Generierung von Tabellenzeilen sind nämlich keineswegs unkritisch. Zunächst wird so ein Befehl nämlich als Inhalt der ersten Spalte der neuen Tabellenzeile gelesen. Damit er mehr als eine Spalte generieren kann, sind diverse Bedingungen an ihn gestellt.
Darüber hinaus stellt es bei einer direkt geschriebenen Tabellenzeile kein Problem mehr dar, wenn mehr als neun Spalten verwendet werden. Sollen die Zellen noch speziell von LaTeX umformatiert werden, so ist das einfach möglich, indem man für jede Spalte bzw. jede Art von Spalten ein eigenes Makro schreibt, das die Formatierung übernimmt:
\documentclass[10pt,a4paper,landscape,DIV=20]{scrartcl}
\usepackage{longtable}
\usepackage{colortbl}
\newcommand*{\FormWochentag}[1]{#1}
\newcommand*{\FormTag}[1]{#1}
\newcommand*{\FormDatum}[1]{#1}
\newcommand*{\FormKommen}[1]{#1}
\newcommand*{\FormGehen}[1]{#1}
\newcommand*{\FormStd}[1]{#1}
\newcommand*{\FormTage}[1]{#1}
\newcommand*{\FormProjekt}[1]{#1}
\newenvironment{timesheet}%[1]% Die Umgebung wird unten ohne Argument verwendet, also sollte sie auch keines haben!
{\setlength{\tabcolsep}{0pt}%
\begin{longtable}
{@{}*{10}{p{0.1\textwidth}@{}}}
\multicolumn{2}{c}{} & \multicolumn{2}{c}{Arbeitszeit}& \multicolumn{2}{c}{Pausenzeit} \\[2ex]
Wochentag & Tag & Datum & Kommen & Gehen & Kommen & Gehen & Std & Tage & Projekt \\[2ex]
\endhead
\FormWochentag{?[wochentag]} & \FormTag{?[datum]} & \FormDatum {?[art]} &
\FormKommen{?[arbeit\_von]} & \FormGehen{?[arbeit\_bis]} &
\FormKommen{?[pause\_von]} & \FormGehen{?[pause\_bis]} &
\FormStd{?[std]} & \FormTage{?[tage]} & \FormProjekt{?[projekt]} \tabularnewline
\hline
}{\end{longtable}}
\begin{document}
\begin{timesheet}
\end{timesheet}
\end{document}
Streng genommen würde ich sogar noch einen Schritt weiter gehen:
\documentclass[10pt,a4paper,landscape,DIV=20]{scrartcl}
\usepackage{longtable}
\usepackage{colortbl}
\newcommand*{\FormWochentag}[1]{#1}
\newcommand*{\FormTag}[1]{#1}
\newcommand*{\FormDatum}[1]{#1}
\newcommand*{\FormKommen}[1]{#1}
\newcommand*{\FormGehen}[1]{#1}
\newcommand*{\FormStd}[1]{#1}
\newcommand*{\FormTage}[1]{#1}
\newcommand*{\FormProjekt}[1]{#1}
\newenvironment{timesheet}%[1]% Die Umgebung wird unten ohne Argument verwendet, also sollte sie auch keines haben!
{\setlength{\tabcolsep}{0pt}%
\begin{longtable}
{@{}*{10}{p{0.1\textwidth}@{}}}
\multicolumn{2}{c}{} & \multicolumn{2}{c}{Arbeitszeit}& \multicolumn{2}{c}{Pausenzeit} \tabularnewline[2ex]
Wochentag & Tag & Datum & Kommen & Gehen & Kommen & Gehen & Std & Tage & Projekt \tabularnewline[2ex]
\endhead
}{
\hline
\end{longtable}
}
\begin{document}
\begin{timesheet}
\FormWochentag{?[wochentag]} & \FormTag{?[datum]} & \FormDatum {?[art]} &
\FormKommen{?[arbeit\_von]} & \FormGehen{?[arbeit\_bis]} &
\FormKommen{?[pause\_von]} & \FormGehen{?[pause\_bis]} &
\FormStd{?[std]} & \FormTage{?[tage]} & \FormProjekt{?[projekt]} \tabularnewline
\FormWochentag{![wochentag]} & \FormTag{![datum]} & \FormDatum {![art]} &
\FormKommen{![arbeit\_von]} & \FormGehen{![arbeit\_bis]} &
\FormKommen{![pause\_von]} & \FormGehen{![pause\_bis]} &
\FormStd{![std]} & \FormTage{![tage]} & \FormProjekt{![projekt]} \tabularnewline
\end{timesheet}
\end{document}
Im Gegensatz zum ursprünglichen Beispiel ergibt es so auch einen Sinn, dass `timesheet` eine Umgebung und nicht einfach nur ein Befehl (ohne Argument) ist.
Schlussbemerkung: Die seltsamen Zeileninhalte habe ich aus dem Beispiel übernommen und wie gewünscht eine zehnte Spalte hinzugefügt. Damit die Tabelle überhaupt auf die Seite passt, musste ich die Klasse ändern und Querformat einstellen.