Serienbrief - fallbezogen gesteuerte Texte

Ich bin gerade dabei, verschiedene MS Word Serienbrief nach LO zu konvertieren.
Das keine direkte Übernahme (1:1 Kopie) möglich ist, war mir am Anfang schon klar, dennoch willigte ich ganz bewusst zu diesem “Höllentrip” ein.
Soweit es um die Übernahme der Briefköpfe ging, musste ich mir keine großen Gedanken machen, weil sowieso alles neu gemacht werden musste. Bei den meisten Serienbriefen der einfachen Art ging alles auch ganz schnell, aber jetzt habe ich die “speziellen” Briefe, die sich durch eine persönliche Anrede auszeichnen und genau hier verzweifele ich gerade.
Ob das jetzt daran liegt, dass ich mich noch in der Semantik von MS gedanklich orientiere oder aber ich jenes berühmtes Brett vor der Stirn habe, weiss ich nicht.
Und an die Power-User gerichtet: die Hinweise zu den Serienbriefe sowie zum definieren von Bedingungen sind mir eingehend bekannt, aber wenig hilfreich.

So, jetzt zum Problem:
es geht darum, die Anreden zu personalisieren, wobei dies eigentlich genau funktioniert. Das Dilemma besteht jetzt aber darin, dass leider auch viele Firmen aufgeführt werden.
Einwandfrei funktionieren:

Sehr geehrte[ Frau] Nachname (Seq.: Bedingter Text Anrede == “Frau” " Frau" :slight_smile:

Sehr geehrte[r Herr] Nachname (Seq.: Bedingter Text Anrede == “Herrn” “r Herr” :slight_smile:

und hier zu meinem Problem:

Sehr geehrte[ Damen und Herren] ( Seq.: Bedingter Text Anrede == “Firma” " Damen und Herren" :slight_smile:

die formale Anrede wird ausgegeben, jedoch finde ich keine Möglichkeit den Nachnamen zu unterdrücken, bzw. als versteckten Text zu formatieren.
Wer kann hier helfen?

Ich empfinde es auch als Dilemma, dass die Bedingungen in LO einzeln nacheinander formuliert werden müssen und nicht ineinander verschachtelt werden können (im Gegensatz zu MS Word). Ebenso können die Datenbankelemente nicht in das Feld Dann/Sonst von Bedingungen eingesetzt werden. Oder habe ich hier etwas nicht verstanden?

Die Datenbankelemente sind:

2019.Datenbank.Tabelle_1.Anrede = Anrede

2019.Datenbank.Tabelle_1.Nachname = Nachname

LO Version 6.2.7.1, Windows 7 Prof.

Vielleicht findest du hier was für dich: DatenUndTextMischen/SerienbriefOhneAssistent - Archiv des LibreOffice- und OpenOffice.org-Wiki

Danke, aber genau diese Ausführungen (ab Kap. 4.3.1) funktionieren bei LO nicht; warum auch immer.
Sofern ich in die Felder dann/sonst das betreffende Datenbankfeld einsetze, werden diese Felder ignoriert, im Gegensatz zu reinen Textfelder (die funktionieren immer).

Als Datenbänkler würde ich die Erstellung der entsprechenden Inhalte nicht nach Writer auslagern, sondern direkt in der Datenbank (über eine Abfrage) erledigen. Dann brauchst Du viele der bedingten Texte von Serienbriefen gar nicht. Da Du ja Zugriff auf die Datenbank hast, wenn Du einen Serienbrief erstellen kannst, musst Du auch Abfragen formulieren können.

Auch eine Möglichkeit, hatte ich bisher nicht erwogen, weil meine Datenbankkenntnisse ausgesprochen rudimentär sind.

Was steckt denn für eine Datenbank dahinter? Inhalt der Anreden ist ja klar und nur bei Firma soll der Nachname nicht erscheinen …

CASE WHEN "Anrede"='Frau' THEN 'Frau' WHEN "Anrede"='Herr' THEN 'r Herr' WHEN "Anrede"='Firma' THEN 'Damen und Herren' END AS "Anrede2"

ergibt schon einmal die Anrede. Das Zusammenfassen von Anrede und Nachname hängt von der Datenbank ab - CONCAT() oder auch || oder einfach +. Also z.B.

CONCAT( CASE WHEN "Anrede"='Frau' THEN 'Frau' WHEN "Anrede"='Herr' THEN 'r Herr' WHEN "Anrede"='Firma' THEN 'Damen und Herren' END, ' ', IFNULL("Nachname",'')) AS "Anrede2"

IFNULL ist notwendig, weil der Nachname ja auch leer sein kann. Aber, wie geschrieben: das ist von Datenbank zu Datenbank teilweise verschieden.

Die exportierten Daten sind im CSV-Format und werden zuerst mit Calc als ods-Datei konvertiert und im Anschluß von LO über Base in eine Datenbank “umgewandelt”. Ist also eine recht triviale Datenbank.
Der Hauptgrund besteht darin, dass alle in Frage kommenden Exporte stets das Feld “Anrede” haben und es daher Sinn macht, eine einheitliche saubere Form des Dokumentenaufbaus zu haben.
Das Datenbankprogramm lässt nur den Export von CSV-Daten zu, andere Exportformate habe ich noch nicht gesehen.

Mit Calc hast Du zwar wenig Abfragemöglichkeiten, dafür aber ja die Funktionen von CALC im Hintergrund. Kopiere den *.csv-Inhalt in eine vorbereitete Calc-Datei, in der sich auch eine zweite Tabelle befindet. In der zweiten Tabelle kannst Du ja die Inhalte entsprechend aufbereiten.

=WENNS(A2="Frau";"Frau";A2="Herrn";"r Herr";A2="Firma";"Damen und Herren")

Statt A2 kann hier natürlich der Verweis auf die entsprechende Zelle in der ersten (aus *.csv) importierten Tabelle stehen. Damit hast Du den Start, der bei mir gerade in B2 der zweiten Tabelle zu lesen ist.

=VERKETTEN(B2;" ";$Tabelle1.B2)

macht dann daraus Deine komplette Anrede. Du nutzt für den Serienbrief jetzt einfach Deine 2. Tabelle statt der ersten.

Dieser Vorschlag ist prinzipiell umsetzbar, aber der dazugehörige Aufwand überschreitet meine “Lust” der Umsetzung: Es muss für jeden Serienbrief eine derartige Tabelle angelegt werden, das kann ich keinen verständlich vermitteln.
Wenn wir diesen Thread auf die eigentliche Frage reduzieren, sollte es doch auch hier eine Lösung geben:
warum kann ich in den dann/sonst Feld jeden x-beliebigen Text einsetzen und der wird dann auch wiedergegeben, aber sofern ich ein Datenbankelement angeben wird die Ausführung “verweigert”.
Den Beschreibungen nach zu urteilen, müsste das funktionieren - tut es aber nicht! WARUM???

@Werner_RJP Ich habe es jetzt nicht getestet, aber hast du schon versucht den Serienbriefassistenten zu verwenden?

Du findest ihn per Menü Extras>Serienbrief-Assistent....

In der erscheinenden Dialogbox, hast du die Auswahl “Bestehendes Dokument verwenden” anzuklicken.

Der Assistent führt dich dann durch die einzelnen Schritte.

Zu dem Thema habe ich vor längerem ein paar Zeilen im Wiki geschrieben (Versionen 5.1 und 5.2).

Ich hoffe, die Beschreibung und die Verwendung des Assistenten hilft dir aus der Klemme.

Viel Erfolg!

Sollte meine Antwort dein Problem gelöst haben, klicke bitte auf das Häkchen im Kreis Bildbeschreibung links neben der Antwort und auf den Pfeil ^ fuer eine positive Abstimmung. Damit wird der Community angezeigt, dass die Frage richtig beantwortet wurde. Vielen Dank

Bei mir Windows 10 Home; Version 1903; 64-Bit | LibreOffice, Version: 6.3.1.2 (x64).

Den Serienassistenten habe ich getestet. Da ich eine extern vorgegebene Datenbank habe und mir das Arbeiten mit den Feldbefehlen geläufig ist, verzichte ich auf den Assistenten, es bringt mich auch nicht weiter.
Und hier der Text mit seinen Feldfunktionen.
Es geht um die personalisierte persönliche Anrede bei Namensnennung, als Unterscheidungsmerkmal steht mir nur das Feldelement Anrede [Herrn, Frau, Firma] zur Verfügung. Und aus genau diesen drei Merkmalen muss die Anrede gesteuert werden:
Sehr geehrte{Bedingter Text 'Anrede == “Herrn” “r Herr” : '}{Bedingter Text 'Anrede == “Frau” " Frau" : '}
{bedingter Text ‘Anrede == “Firma” : ([Datenbank.Liste.Nachname])’}
Und das sollte herauskommen:
Anrede “Herrn”: Sehr geehrter Herr ,
Anrede “Frau” : Sehr geehrte Frau ,
Anrede “Firma”: Sehr geehrte Damen und Herren,
und als Ergebnis kommen die jeweiligen Anreden sowie erwartet heraus, jedoch fehlen der Nachname bei der persönlichen Anrede.
Wo ist der Fehler?