Fragensteller
Word Felder mit Powershell ausfüllen

Allgemeine Diskussion
-
Hallo,
ich habe eine Word Vorlage mit 5 Feldern. Diese möchte ich per PowerShell befüllen, hat jemand einen Vorschlag wie ich am besten vorgehe?
Wie ich bisher rausgefunden habe muß ich wohl mit Word.Application arbeiten, finde aber keine Befehlsübersicht oder ähnliches.
Gruß Sascha
- Typ geändert Denniver ReiningMVP, Moderator Sonntag, 18. Dezember 2022 12:58 ....
Alle Antworten
-
Hier findest du das Objektmodell von Word.Application.
https://learn.microsoft.com/en-us/office/vba/api/word.application
Orientiere dich nicht an VBA. Hier findest du halt alle Zugriffswege auf Word Dokumente.
-
Hallo Sascha,
ich hatte einmal ähnliches mit VBA umgesetzt. Vielleicht hilft dir das etwas. Objektmodul sollte ja gleich sein.
Im Word gibt es Textmarken mit Namen (zb. Famname, Vorname usw.). Diese werden von VBA befüllt
strVorlage = "h:\vorlagen\rechnung.dotx"
Set objword = CreateObject("Word.Application")
With objword
.Visible = True
.Documents.Add strVorlage
If Not IsNull(Me.FAMNAME) Then
.ActiveDocument.Bookmarks("Famname").Select
.Selection.Text = Me.FAMNAME
End If
If Not IsNull(Me.VORNAME) Then
.ActiveDocument.Bookmarks("Vorname").Select
.Selection.Text = Me.VORNAME
End If
' .ActiveDocument.SaveAs sDateiname
End With
objword.Activate
Set objword = Nothing
Close
-
Leider komme ich noch nicht weiter. Bin noch recht neu bei PowerShell und mit VBA hatte ich noch nie zu tun.
Ich habe ein Skript gefunden das alle möglichen Infos über das Feld herausgibt, in diesem Fall "Durchwahl". Wenn mir da jemand helfen könnte wäre das super.
Ich habe also $tel = "12345" und möchte dies ins Word Dokument schreiben wo aktuell das Feld "Durchwahl" ist.
Application : Microsoft.Office.Interop.Word.ApplicationClass
Creator : 1297307460
Parent : Microsoft.Office.Interop.Word.DocumentClass
Range : System.__ComObject
LockContentControl : False
LockContents : False
XMLMapping : System.__ComObject
Type : 0
DropdownListEntries :
PlaceholderText : System.__ComObject
Title : Durchwahl
DateDisplayFormat :
MultiLine :
ParentContentControl :
Temporary : False
ID : 4055329363
ShowingPlaceholderText : True
DateStorageFormat : 2
BuildingBlockType : 0
BuildingBlockCategory :
DateDisplayLocale : 1031
DefaultTextStyle : System.__ComObject
DateCalendarType :
Tag : Durchwahl
Checked :
Color : -16777216
Appearance : 0
Level : 0
RepeatingSectionItems :
RepeatingSectionItemTitle :
AllowInsertDeleteSection :
TypeName : -
Eigentlichmusst du nir VBA-Code in ps1-Code umsetzen.
https://bettersolutions.com/word/fields/vba-code.htm
In ActiveDocument.Fields findest du die Felder des Dokuments.
Per ForEach kannst die Felder durchlaufen.
Wenn du den Namen des Feldes kennst, kannst du auch per Index zugreifen:ActiveDocument.Fields["Name"]
Per .Code erhältst du die komplette Definition.
Per .Result das Formelergebnis.
Ist es nur ein Datenfeld ohne Formel kannstdu das Ergebnis überschreiben.ActiveDocument.Fields["Name"].Result = "neuer Wert"
Anschließend muss das Dokument den Inhalt neu laden:
ActiveDocument.Fields["Name"].update()