stefanseiner
Goto Top

Batch um Word-Datei für 365 Tage zu erstellen mit Datum als Dateiname und Inhalt

Hallo zusammen,

wir brauchen in der Firma jedes Jahr als Protokollvorlage je eine Worddatei pro Tag mit
- Dateiname = 01 , 02, 03 ... 31 (wird dann abgelegt in den Verzeichnissen 01 - 12, also eins pro Monat)
- in der Dokumentenvorlage selbst, 2. Zeile dann nach dem Schema "Mittwoch, 09.06.2021"

Aktuell bastelt da jedes Jahr jemand stunden- / tagelang die einzelnen 365 Word-Dateien vor.

Gibt es da eine Möglichkeit, die Worddateien per Batch entsprechend zu erstellen? Das würde viel Zeit und Nerven sparen.

Danke schonmal im Voraus für eure Hilf
Grüße
Stefan

Content-Key: 667445

Url: https://administrator.de/contentid/667445

Printed on: May 7, 2024 at 15:05 o'clock

Member: PeterPanter
PeterPanter Jun 09, 2021 updated at 10:43:25 (UTC)
Goto Top
Member: PeterPanter
PeterPanter Jun 09, 2021 at 10:46:21 (UTC)
Goto Top
Ups, übersehen:
- in der Dokumentenvorlage selbst, 2. Zeile dann nach dem Schema "Mittwoch, 09.06.2021"
Das vielleicht mit eine Word-Feldfunktion, die an den Dateinamen gekoppelt ist...
Member: chkdsk
chkdsk Jun 09, 2021 at 10:56:36 (UTC)
Goto Top
Moin,

Batch ist für sowas eigentlich nicht geeignet. Probier mal folgendes mit der Powershell.
$oWord = New-Object -Com Word.Application
$oWord.Visible = $true
$oMissing = [System.Reflection.Missing]::Value
$oDoc = $oWord.Documents.Add($oMissing, $oMissing, $oMissing, $oMissing)
$oPara1 = $oDoc.Paragraphs.Add($oMissing)
$oPara1.Range.Text = " "  
$oPara1.Range.InsertParagraphAfter()
$oPara2 = $oDoc.Paragraphs.Add($oMissing)
$date = Get-Date -Format "dddd MM/dd/yyyy"  
$oPara2.Range.Text = "$date"  
$oPara2.Range.InsertParagraphAfter()
$filename = 'C:\temp\YOUR NAME.docx'  
$oDoc.SaveAs($filename,
$oMissing, $oMissing,
$oMissing, $oMissing,
$oMissing, $oMissing,
$oMissing, $oMissing,
$oMissing, $oMissing)
$oDoc.Close()
$oWord.Quit()
Müsstest in Zeile 12 dann nur den entsprechenden Speicherort angeben bzw. für den User eine einfache Abfrage einbauen, wie die Datei heißen soll
Member: Stefanseiner
Stefanseiner Jun 09, 2021 at 13:35:23 (UTC)
Goto Top
cool, danach habe ich zumindest schonmal das Datum in der zweiten Zeile einer Word Datei.
Und wie bekommt man das nun für alle 365 Tage im Vorfeld hin?
Member: Remotedesktopverbindung
Remotedesktopverbindung Jun 09, 2021 at 14:25:37 (UTC)
Goto Top
Servus,

Serienbrief könnte hier Abhilfe verschaffen.
Member: TK1987
TK1987 Jun 09, 2021 updated at 14:57:55 (UTC)
Goto Top
Moin Stefan,

Zitat von @Stefanseiner:
Und wie bekommt man das nun für alle 365 Tage im Vorfeld hin?
Schnellschuss:
# Quellpfad
$Pfad = 'C:\Test'  

# Ordner für einzelne Monate Erzeugen
For ($i=1 ; $i -lt 13 ; $i++) { [void](md -Force ("$Pfad\{0:d2}" -f $i)) }  

# Anfangsdatum 1. Januar
$Date = Get-Date -Day 1 -Month 1

# Folgejahr
$NY = $Date.AddYears(1).Year

# Word Öffnen
$Word = New-Object -Com Word.Application
$Word.DisplayAlerts = $false
$Doc = $Word.Documents.Add()

# Dokumente erzeugen
while ($Date.Year -lt $NY) {
  $Doc.Select()
  $Word.Selection.TypeText(($Date.ToString("`ndddd, \den dd.MM.yyyy")))  
  $Doc.SaveAs(("$Pfad\" + $Date.ToString('MM\\dd') + '.docx'))  
  $Date = $Date.AddDays(1)
}

# Word Beenden
$Doc.Close()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Word)

Gruß Thomas
Member: chkdsk
chkdsk Jun 09, 2021 at 19:19:42 (UTC)
Goto Top
Wie genau soll denn der Dateiname aussehen?

Grüße
Member: TK1987
TK1987 Jun 09, 2021 at 19:31:51 (UTC)
Goto Top
Moin,

Zitat von @chkdsk:
Wie genau soll denn der Dateiname aussehen?
Steht doch im Eingangspost:
Zitat von @Stefanseiner:
- Dateiname = 01 , 02, 03 ... 31
Hab ich bei meinem Code aber auch alles schon berücksichtigt.

Gruß Thomas
Member: Stefanseiner
Stefanseiner Jun 04, 2023 at 06:17:16 (UTC)
Goto Top
auch wenn der Thread schon etwas her ist möchte ich hier mal anknüpfen.
Der Code von Thomas funktioniert gut, danke nochmals hierfür face-smile

Könnte man den noch irgendwie ergänzen / abändern so dass
- keine leere Word-Datei erzeugt wird sondern ein vorhandenes Word-Dokument als Vorlage benutzt wird? Also im Grunde das Word 365 Mal kopiert mit der Dateinamensgebung wie bereits implementiert, und mit der Datumsangabe in der 2. Zeile wie bereits implementiert.

Das wäre mega!
Mitglied: 7010350221
Solution 7010350221 Jun 04, 2023 updated at 21:09:12 (UTC)
Goto Top
Zitat von @Stefanseiner:
- keine leere Word-Datei erzeugt wird sondern ein vorhandenes Word-Dokument als Vorlage benutzt wird?

Vorlagen benutzt du so
$Doc = $Word.Documents.Add("c:\pfad\vorlage.dotx")  
https://learn.microsoft.com/en-us/office/vba/api/word.documents.add

# Quellpfad
$Pfad = 'C:\Test'  
# Vorlage
$template = 'C:\test\vorlage.dotx'  

# Ordner für einzelne Monate Erzeugen
For ($i=1 ; $i -lt 13 ; $i++) { [void](md -Force ("$Pfad\{0:d2}" -f $i)) }  

# Anfangsdatum 1. Januar
$Date = Get-Date -Day 1 -Month 1

# Folgejahr
$NY = $Date.AddYears(1).Year

# Word Öffnen
$Word = New-Object -Com Word.Application -P @{DisplayAlerts = 0}
$Doc = $Word.Documents.Add($template)

# Dokumente erzeugen
while ($Date.Year -lt $NY) {
  # Datum in Absatz schreiben
  $Doc.Paragraphs[1].Range.Text = $Date.ToString("dddd, \den dd.MM.yyyy`n")  
  # Dokument speichern
  $Doc.SaveAs(("$Pfad\" + $Date.ToString('MM\\dd') + '.docx'))  
  # nächster Tag
  $Date = $Date.AddDays(1)
}

# Word Beenden
$Doc.Close()
# Meldungen auf Standard zurücksetzen
$Word.DisplayAlerts = -1
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($Word)
Gruß
Member: Stefanseiner
Stefanseiner Jun 04, 2023 at 10:31:05 (UTC)
Goto Top
supergut, mit meiner Testdatei schaut das schonmal prima aus!
Die richtige Vorlage habe ich gerade nicht zur Hand, muss ich auf Arbeit ausprobieren ob das Datum im Dokument an die richtige Stelle gesetzt wird. Melde mich dann wieder zurück face-smile
Mitglied: 7010350221
7010350221 Jun 04, 2023 updated at 13:22:59 (UTC)
Goto Top
Man kann auch in der Vorlage ein "Bookmark (Textmarke)" an die gewünschte Position setzen und dann im Code direkt dort das Datum platzieren. Den Wünschen sind hier keine Grenzen gesetzt.
Member: Stefanseiner
Stefanseiner Jun 04, 2023 at 17:45:13 (UTC)
Goto Top
mit dem richtigen Paragraphen habe ich die richtige Stelle "getroffen".
Aber einen kleinen Fehler habe ich gefunden, erstes Dokument passt, im zweiten stehen dann zwei Datumsangaben, im dritten dann drei etc.

Jemand eine Idee, wo der Fehler liegt?
gt
Mitglied: 7010350221
7010350221 Jun 04, 2023 at 21:03:20 (UTC)
Goto Top
Hab's korrigiert
Member: Stefanseiner
Stefanseiner Jun 05, 2023 at 05:26:04 (UTC)
Goto Top
vielen lieben Dank, so passt alles perfekt face-smile
Das erspart mir in Zukunft viel Arbeit
Member: Stefanseiner
Stefanseiner Jun 06, 2023 at 12:17:44 (UTC)
Goto Top
noch zwei Fragen im Nachgang:
- was muss ich am Code ändern, um die Dokumente für das Folgejahr zu erstellen?
- wie kann ich den oben erwähnten Marker setzen, um das Datum an eine beliebige STelle zu setzen?
Member: TK1987
TK1987 Jun 06, 2023, updated at Jun 07, 2023 at 05:30:17 (UTC)
Goto Top
Moin,

Zitat von @Stefanseiner:
- was muss ich am Code ändern, um die Dokumente für das Folgejahr zu erstellen?
Einfach beim Anfangsdatum noch das Jahr ergänzen...
# Anfangsdatum 1. Januar
$Date = Get-Date -Day 1 -Month 1 -Year 2024

- wie kann ich den oben erwähnten Marker setzen, um das Datum an eine beliebige Stelle zu setzen?
  • Öffne deine Wordvorlage.
  • Gehe mit dem Cursor zu der Stelle, an der du das Datum platzieren willst.
  • Wähle im Reiter Einfügen Textmarke aus
  • Wähle hinzufügen und vergebe einen beliebigen Namen für deine Textmarke
# Datum an Textmarke schreiben
$Doc.Bookmarks["Textmarkenname"].Range.Text = $Date.ToString("dddd, \den dd.MM.yyyy`n")  

Gruß Thomas
Member: Stefanseiner
Stefanseiner Jun 06, 2023 at 16:58:11 (UTC)
Goto Top
ihr seid der Hammer face-smile