Announcement

Collapse
No announcement yet.

Word-Vorlage mit Übergabe von Werten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Word-Vorlage mit Übergabe von Werten

    Guten morgen ihr

    könnt ihr mir vielleicht sagen, wie ich ein Word-Dokument erstelle, dem ich auch noch Werte übergebe, die dann auch an bestimmte Stellen eingefügt werden??

    Vielen dank schon mal im voraus

    LG

  • #2
    meinst du in das dokument schreiben? dann würde ich dir empfehlen einmal hier zu gucken, da steht nämlich alles über die streamwriter und filestreams

    http://www.galileocomputing.de/openb...0019091f03318d

    ansonsten musste dein problem ein wenig genauer erklären

    Comment


    • #3
      ich will ein Word-Dokument halt erstellen bzw eine Vorlage öffnen und dann da halt irgendwie die Daten die ich von der Datenbank hole in bestimmte Felder im Word-Dokument befüllen.

      Comment


      • #4
        Hallo,

        der übliche Weg besteht in der Automation von Word. Es wird eine DOT-Vorlage erstellt, indem Textmarken die Position der einzufügenden Werte festlegen. Das Programm kann dann basierend auf dieser DOT-Vorlage ein neue Dokument anfordern und dann die Werte für jede Textmarke übergeben.

        Für den Zugriff auf die Automation-Objekte von Word stehen 2 Wege zur Verfügung:
        1. VSTO (Visual Studio Tools for Office), indem die Visual Studio-Projektvorlagen genutzt werden.
        2. PIA (Primary Interop Assembly) der jeweiligen Word-Version, diese wird als Verweis ins eigene Projekt eingebunden.

        Im Fall von Microsoft Office 2003 werden die PIA's nur dann installiert, wenn im Office-Setup die ".NET-Programmierunterstützung" ausgewählt wird. Im Fall von Microsoft Office 2007 werden die PIA's bereits in der Voreinstellung mit installiert.

        Das folgende Beispiel demonstriert den Zugriff über die PIA's auf Word 2003. Die Klasse wird in eine VB-Klassenbibliothek ausgelagert und vom C#-Programm als Verweis eingebunden. Der Grund dafür liegt darin, dass die "Eigenheiten" des Word-Objektmodells besser mit Visual Basic (späte Bindung) beherrschbar sind. Die Methode DoInsertAtBookmark fügt den Wert an der Position der benannten Textmarke ein.

        Code:
        '
        ' Automation-Controller greift auf die nachinstallierte PIA von Word 2003 zu,
        ' um Word-Dokumente generieren zu können
        ' (Verweis auf die Microsoft Word 11.0 Object Library (Registerseite COM) hinzufügen)
        '
        ' Wenn die Eigenschaft Visible des Application-Objekts von Word auf True gesetzt wird,
        ' kann der Anwender bei laufender Automation die Word-Instanz (Prozess) beenden. Aus
        ' diesem Grund schaltet sich der Controller auf das Quit-Event von Word auf, um in 
        ' diesem Fall das eigene private Objektfeld »aWordApp« zu entwerten. Die Client-
        ' Anwendung hat dann die Möglichkeit, nach jedem Automation-Zugriff zu prüfen, ob 
        ' der Aufruf erfolgreich war oder ob die Word-Instanz in der Zwischenzeit beendet wurde.
        '
        ' Stand: 27.02.2006
        '
        
        ' Kollision mit der Application-Klasse von .NET vermeiden
        Imports Word2003 = Microsoft.Office.Interop.Word
        Imports System.Runtime.InteropServices
        
        Public Class EnergieWord2003
        
            Private sCurrentDocName As String = String.Empty
            ' Zugriff nur auf das Interface
            Private aWordApp As Word2003.Application
            Private aWordDocCol As Word2003.Documents
            Private aWordDoc As Word2003.Document
        
            Public Sub DoWordStart(ByVal bVisible As Boolean)
                ' Automation-Instanz über die PIA-Wrapperklasse erzeugen
                aWordApp = New Word2003.ApplicationClass
                aWordApp.Visible = bVisible
                ' Ereignisbehandlung für das Quit-Event aktivieren
                AddHandler aWordApp.Quit, AddressOf aWordApp_Quit
            End Sub
        
            Private Sub aWordApp_Quit()
                aWordApp = Nothing
            End Sub
        
            Public Function DoNewDoc(ByVal sDOT As String) As Integer
                If Not aWordApp Is Nothing Then
                    aWordDocCol = aWordApp.Documents
                    aWordDoc = aWordDocCol.Add(sDOT)
                    sCurrentDocName = aWordDoc.Name
                    Return 1
                Else
                    Return 0
                End If
            End Function
        
            Public Function DoInsertAtBookmark(ByVal sBookmark As String, ByVal sTxt As String) As Integer
                If Not aWordApp Is Nothing Then
                    If aWordDoc.Name = sCurrentDocName Then
                        aWordDoc.Bookmarks(sBookmark).Range.Text = sTxt
                    Else
                        ' Fehler: Es ist nicht mehr das gleiche Dokument aktiv
                        Return 2
                    End If
                    Return 1
                Else
                    ' Fehler: Der Verweis auf das Document-Objekt von Word ist ungültig
                    Return 0
                End If
            End Function
        
            Public Function DoPrintCurrentDoc() As Integer
                If Not aWordApp Is Nothing Then
                    aWordDoc.PrintOut(Background:=False)
                    Return 1
                Else
                    Return 0
                End If
            End Function
        
            Public Function DoSaveCloseDoc(ByVal sDOC As String) As Integer
                If Not aWordApp Is Nothing Then
                    aWordDoc.SaveAs(sDOC)
                    aWordDoc.Close()
                    sCurrentDocName = String.Empty
                    Marshal.ReleaseComObject(aWordDoc)
                    aWordDoc = Nothing
                    Marshal.ReleaseComObject(aWordDocCol)
                    aWordDocCol = Nothing
                    Return 1
                Else
                    Return 0
                End If
            End Function
        
            Public Sub DoWordStop()
                If Not aWordApp Is Nothing Then
                    ' Ereignisbehandlung für das Quit-Event vorher trennen
                    RemoveHandler aWordApp.Quit, AddressOf aWordApp_Quit
                    aWordApp.Quit()
                    Marshal.ReleaseComObject(aWordApp)
                    aWordApp = Nothing
                End If
            End Sub
        
        End Class
        Zuletzt editiert von Andreas Kosch; 06.02.2008, 09:55.

        Comment

        Working...
        X