Moin moin erstmal in die Runde,
ich möchte aus einer Windows-Forms-Anwendung heraus ein Worddukument öffnen und dort an den vorhanden Textmarken den Inhalt von Variablen und Textboxen einfügen.
Von der Sache her klappt die Übergabe, nur im Worddukument werden die Variableninhalte alle an ein und derselben Stelle eingefügt, oder aber auch (reproduzierbar, aber unverständlich) wild durcheinander. Soll heissen, die "Word springt nicht an die entsprechende Textmarke".
Hier der Quellcode, den ich verwende (hatte ich im Netz gefunden und entsprechend angepasst) :
Zur (vllt wichtigen) Info
Eigentlich sollte doch ein gezielte Springen zur nächsten Textmarke wegen der Verwendung von XXX.Bookmarks("XXX").Range.Text nicht notwendig sein, oder bin ich da nun auf dem Holzweg?
Hat jemand eine zündene Idee?
Vielen Dank schon mal.
ich möchte aus einer Windows-Forms-Anwendung heraus ein Worddukument öffnen und dort an den vorhanden Textmarken den Inhalt von Variablen und Textboxen einfügen.
Von der Sache her klappt die Übergabe, nur im Worddukument werden die Variableninhalte alle an ein und derselben Stelle eingefügt, oder aber auch (reproduzierbar, aber unverständlich) wild durcheinander. Soll heissen, die "Word springt nicht an die entsprechende Textmarke".
Hier der Quellcode, den ich verwende (hatte ich im Netz gefunden und entsprechend angepasst) :
Zur (vllt wichtigen) Info
- "Imports Microsoft.Office.Interop.Word" löste haufenweise Fehler aus, da es dadurch wohl Irritationen mit Namespaces gab
- der Verweis auf Microsoft Word 14.0 Object Library ist gesetzt
- ich verwende Visual Studio 2013 und Word 2010
- ich bin, sagen wir mal, fortgeschrittener Programmierneuling
VB.NET-Quellcode
- Private Sub word_starten()
- Dim Anrede, Name, Beginnjahr As String
- Anrede = dt.Rows(pos).Item("Anrede").ToString
- Name = Kd_Name.Text.ToString
- Beginnjahr = Date.ParseExact(Kd_Tarif_seit.Text, "dd.MM.yyyy", Nothing).Year.ToString
- Dim word As New Microsoft.Office.Interop.Word.Application
- Dim doc As Microsoft.Office.Interop.Word.Document
- Try
- word.Visible = True 'Word sehen zum Test?
- doc = word.Documents.Open("1.docx")
- 'doc.Protect(WdProtectionType.wdNoProtection)
- doc.Activate()
- word.ActiveDocument.Bookmarks("Vorname").Range.Text = Kd_Vorname.Text
- word.ActiveDocument.Bookmarks("Name").Range.Text = Kd_Name.Text
- word.ActiveDocument.Bookmarks("Strasse").Range.Text = Kd_Strasse.Text
- word.ActiveDocument.Bookmarks("Hausnummer").Range.Text = Kd_Hausnummer.Text
- word.ActiveDocument.Bookmarks("Plz").Range.Text = Kd_Plz.Text
- word.ActiveDocument.Bookmarks("Ort").Range.Text = Kd_Ort.Text
- word.ActiveDocument.Bookmarks("Briefanrede").Range.Text = Kd_Briefanrede.Text
- word.ActiveDocument.Bookmarks("Beginnjahr").Range.Text = Beginnjahr
- word.ActiveDocument.Bookmarks("Anrede").Range.Text = Anrede
- word.ActiveDocument.Bookmarks("Name1").Range.Text = Name
- word.Visible = True
- 'doc.Protect(WdProtectionType.wdAllowOnlyReading)
- ' doc.Activate()
- 'doc.SaveAs("c:\\test.doc")
- 'doc.Close()
- 'MessageBox.Show("Datei erstellt")
- Catch ex As Exception
- MessageBox.Show(ex.ToString)
- ' Log.SaveLogFile(ex.ToString)
- 'Finally
- ' word.Application.Quit()
- End Try
- End Sub
Eigentlich sollte doch ein gezielte Springen zur nächsten Textmarke wegen der Verwendung von XXX.Bookmarks("XXX").Range.Text nicht notwendig sein, oder bin ich da nun auf dem Holzweg?
Hat jemand eine zündene Idee?
Vielen Dank schon mal.