Excel zu Word à la Serienbrief, ... aber nicht ganz

chaospir8

★★★★★-Oldie
Hallo liebe Boardies,

ich habe hier eine Excel-Tabelle mit >200 Einträgen nach folgendem Muster:

1626245927905.png


Ich möchte in eine vorhandene Word-Vorlage diese Daten (je Zeile ein Word-Dokument) übernehmen und diese >200 Word-Dokumente so automatisiert erstellen lassen.
Also in etwa wie die Serienbrief-Funktion, aber nicht ganz, weil nicht gedruckt werden soll, sondern xxx neue Word-Dokumente erstellt werden sollen, möglichst auch mit Dateinamen generiert aus den o.g. Daten (Prozess_Programm_Testfall.docx).

Hat jemand eine Idee für eine Umsetzung?
 

dr_tommi

alter Oldie
Ich denke mal wenn du die Serienbrieffunktion nicht nutzen willst, wird es wohl eine Makro-Lösung werden.
Also in der Art zeilenweise Excel lesen, mit den Daten das Musterdokument aufrufen, suchen und ersetzen, dann speichern unter dem neuen Namen.
Ich würde das mit Winautomation lösen,. aber das gibt es nicht mehr so wie früher.
Aber auch andere Lösungen wie Autoit o.ä. sollten gehen.
 

chaospir8

★★★★★-Oldie
Wenn man bei der Serienbrieffunktion auch neue Word-Dokumente mit eigenen Dateinamen (aus den Excel-Daten generiert) speichern kann, dann schon gerne.
Mit AutoHotKey (AHK; ist ein AutoIt-Konkurrent, den ich seit xx Jahren nutze) bin ich leider gescheitert.
Makro/VBA habe ich ein paar Ansätze ergoogelt, ist mir aber zu komplex .... da ist es für mich einfacher, es einer/m Werkstudenten/in zu geben ;D
 

dr_tommi

alter Oldie
Wenn man bei der Serienbrieffunktion auch neue Word-Dokumente mit eigenen Dateinamen (aus den Excel-Daten generiert) speichern kann, dann schon gerne.
Kann man, allerdings werden standardmäßig alle Seiten gespeichert. Man muss das Zieldokument nicht drucken oder als PDF speichern.
Du müsstest also irgendwie das Dokument in einzelne Teile separieren und den Namen für die Speicherung aus der Excel-Tabelle nehmen.
Makro/VBA habe ich ein paar Ansätze ergoogelt, ist mir aber zu komplex .... da ist es für mich einfacher, es einer/m Werkstudenten/in zu geben ;D
Mit unserer geballten Schwarmintelligenz sollte doch eine Lösung zu finden bzw. anzupassen sein.

Muss es denn unbedingt ein Word-Dokument sein also eine *.doc bzw. docx?
Für *.txt oder *.rtf könnte man sich auch eine kurze Lösung als Batch/Script/Powershell vorstellen.
 

chaospir8

★★★★★-Oldie
Ja, docx ist leider Pflicht. Konkret geht's um ein Test Management-System, welches dann auch (bei Bedarf ... hatte ich fast nie) eben aus den verschiedenen Testfällen die relevanten "zusammenklebt" zu einem großen Testroadbook-Dokument. Und ich habe öfters Input in Form von Excels. Bei zig Testfällen beschäftige ich gerne eine/n Werkstudenten/in ... bei xxx Testfällen würde das an Tierquälerei grenzen :D ;)
 

RichyZuHause

Alter mit Ego
Normalerweise ist die Ausgabe des Serienbriefes ein großes langes Dokument.
Wenn man das jetzt, wie oben geschrieben, per "Mail Merge"/"Serienbrief" erzeugt, dann könnte man doch DANACH rangehen und die Dateien trennen.
Wie das geht, ist hier beispielhaft beschrieben:
Das Stichwort lautet "Master Document", "Sub-Dokument".
Die Sub-Dokumente kriegt man dann separiert.
Zusätzlich hat man dann gleich noch eine Art Inhaltsverzeichnis der Dokumente.

Wenn man automatisieren will, dann auf dieser Ebene.
Die Excel-zu-Word-Serienaktion nachzubauen, halte ich nicht für schlau.
 

diddl2000

Bekanntes Mitglied
Ich habe mal vor einiger Zeit so eine Funktion mit einem word Makro erledigt. Hier wurden allerdings pdf aus den .docm Dateien erzeugt und im Unterverzeichnis pdf abgelegt. Die Dateinamen richteten sich nach zwei bestimmten Serienbrieffeldern, bzw. bekamen fortlaufende Nummern, falls beide Felder leer waren. Zur Ausführung des Makros hatte ich einen temporären Menüeintrag unter ADD-INS angelegt.

Ich schieb dir den Code, der unter ThisDocument abgelegt ist, mal hier rein:

Option Explicit Private Sub Document_Open() Dim ctrl1 As Variant Set ctrl1 = CommandBars("Standard").Controls.Add(Type:=msoControlButton, ID:=2522, Temporary:=True) 'ID:=2522,Before:=1 ctrl1.Caption = "PDF erstellen" ctrl1.Style = msoButtonCaption ctrl1.TooltipText = "Erstellt einzelne PDF aus dem Serienbrief" ctrl1.OnAction = "Serienbrief_im_PDF_Format_speichern" ctrl1.Style = msoButtonIconAndCaption ctrl1.FaceId = 620 End Sub Private Sub Document_Close() Dim strPfad As String, strDotName As String On Error Resume Next CommandBars("Standard").Reset NormalTemplate.Saved = True End Sub Sub Serienbrief_im_PDF_Format_speichern() ' set variables Dim iBrief As Integer, sBrief As String Dim AppShell As Object Dim Path As String, strLW As String Dim iFF As Integer, strFileNr As String ' catch any errors On Error GoTo ErrorHandling iFF = 1 Path = ActiveDocument.Path If Path = "" Then GoTo ErrorHandling strLW = Left(Path, 2) ChDrive strLW ChDir Path Path = Path & Application.PathSeparator & "pdf" If Dir(Path, vbDirectory) = "" Then MkDir Path End If On Error GoTo ErrorHandling 'Anwendung ausblenden für bessere Perfomance MsgBox "Serienbriefe werden in das Unterverzeichnis ""pdf"" exportiert. Dieser Vorgang kann einige Minuten dauern - Microsoft Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation Application.Visible = False 'Serienbrief erzeugen und als pdf exportieren With ActiveDocument.MailMerge .DataSource.ActiveRecord = 1 Do .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = .ActiveRecord .LastRecord = .ActiveRecord If .DataFields("Feld1").Value <> "" Then sBrief = Path & Application.PathSeparator & .DataFields("Feld1").Value & ".pdf" ElseIf .DataFields("Feld2").Value <> "" Then sBrief = Path & Application.PathSeparator & .DataFields("Feld2").Value & ".pdf" Else sBrief = Path & Application.PathSeparator & .DataFields("ohne Feld" & iFF).Value & ".pdf" iFF = iFF + 1 End If End With .Execute Pause:=False If Dir(sBrief) <> "" Then 'Datei existiert schon, Nummerierung anhängen sBrief = Left(sBrief, Len(sBrief) - 4) strFileNr = Right(sBrief, 3) If Left(strFileNr, 1) = "_" Then strFileNr = "_" & Format(Val(Right(strFileNr, 2)) + 1, "00") Else strFileNr = "_" & Format(2, "00") While Dir(sBrief & strFileNr & ".pdf") <> "" And Val(Right(strFileNr, 2)) < 99 'höchste Nummerierung ermitteln strFileNr = "_" & Format(Val(Right(strFileNr, 2)) + 1, "00") Wend End If sBrief = sBrief & strFileNr & ".pdf" End If If .DataSource.DataFields("Feld1").Value > "" Or _ .DataSource.DataFields("Feld2").Value > "" Then ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF End If ActiveDocument.Close False If .DataSource.ActiveRecord < .DataSource.RecordCount Then .DataSource.ActiveRecord = wdNextRecord Else Exit Do End If Loop End With On Error Resume Next CommandBars("Standard").Controls("PDF erstellen").Delete ' error handling ErrorHandling: Application.Visible = True If Err.Number = 76 Then MsgBox "Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical ElseIf Err.Number = 5852 Then MsgBox "Das Dokument ist kein Serienbrief" ElseIf Err.Number = 4198 Then MsgBox "Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical ElseIf Err.Number = 91 Then MsgBox "Exportieren von Serienbriefen abgebrochen", vbOKOnly + vbExclamation ElseIf Err.Number > 0 Then MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.", vbOKOnly + vbCritical Else MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation End If End Sub

Ich hoffe, du kannst damit etwas anfangen

Gruß
diddl
 

chaospir8

★★★★★-Oldie
Eine Werkstudentin probiert heute noch mit Serienbrieffunktion rum. Ich bin gestern mit AutoHotKey gescheitert. ...
 

RichyZuHause

Alter mit Ego
Die Excel-zu-Word-Serienaktion nachzubauen, halte ich nicht für schlau.
Aber Diddl zeigt, dass ein erweitertes Benutzen der vorhandenen Serienbrief-Funktionalität per Macro durchaus sinnvoll und machbar ist.
Jetzt muss der Chaos-Aspirant nur noch auf Word statt PDF umstellen.
Das schafft die Abhängige nicht allein.
 
Oben Unten