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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667445
Url: https://administrator.de/contentid/667445
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
18 Kommentare
Neuester Kommentar
Moin,
Batch ist für sowas eigentlich nicht geeignet. Probier mal folgendes mit der Powershell.
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
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()
Moin Stefan,
Schnellschuss:
Gruß Thomas
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
Moin,
Steht doch im Eingangspost:
Hab ich bei meinem Code aber auch alles schon berücksichtigt.
Gruß Thomas
Steht doch im Eingangspost:
Hab ich bei meinem Code aber auch alles schon berücksichtigt.
Gruß Thomas
Zitat von @Stefanseiner:
- keine leere Word-Datei erzeugt wird sondern ein vorhandenes Word-Dokument als Vorlage benutzt wird?
- 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")
# 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)
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.
Hab's korrigiert
Moin,
Gruß Thomas
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...- was muss ich am Code ändern, um die Dokumente für das Folgejahr zu erstellen?
# 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