[VB.NET] Export nach Word geht nur bei Office 11

deusfalsus

Erfahrenes Mitglied
Ich habe mit folgender Funktion einen Export nach Word realisiert:
Visual Basic:
Imports Microsoft.Office.Interop
Imports System.IO

...

Sub ListeExportieren()
Try
            Dim m_wdApp As Word.Application
            Dim m_wdDatei As Word.Document

            m_wdApp = New Word.Application()

            m_wdDatei = m_wdApp.Documents.Open("...Pfad\vorlage.doc")

            m_wdApp.ActiveDocument.Bookmarks.Item("Stand").Select()
            m_wdApp.Selection.TypeText(DateAndTime.DateString & " " & TimeOfDay)


            
            m_wdApp.ActiveDocument.Bookmarks.Item("Daten").Select()
            'Daten bis vorletzte Zeile schreiben
            For r = 0 To KonsTab.Rows.Count - 2
                For c = 1 To KonsTab.Columns.Count - 1
                    'On Error Resume Next
                    If Not KonsTab.Rows(r).Item(c).ToString = "" Then
                        m_wdApp.Selection.Text = KonsTab.Rows(r).Item(c)
                    End If
                    m_wdApp.WordBasic.nextcell()
                Next
            Next

            'letzte Zeile bis vorletzte Zelle schreiben
            For c = 1 To KonsTab.Columns.Count - 2
                'On Error Resume Next
                If Not KonsTab.Rows(KonsTab.Rows.Count - 1).Item(c).ToString = "" Then
                    m_wdApp.Selection.Text = KonsTab.Rows(KonsTab.Rows.Count - 1).Item(c)
                End If

                m_wdApp.WordBasic.nextcell()
            Next

            'letzte Zelle schreiben, ohne dabei in nächste Zelle zu springen, damit keine unnütze leere Tabellenzeile erzeugt wird
            If Not KonsTab.Rows(KonsTab.Rows.Count - 1).Item(KonsTab.Columns.Count - 1).ToString = "" Then
                m_wdApp.Selection.Text = KonsTab.Rows(KonsTab.Rows.Count - 1).Item(KonsTab.Columns.Count - 1)
            End If

            m_wdApp.Visible = True
            m_wdApp.Activate()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
End Sub

Läuft auf dem Client Office 11 (2003), funktioniert alles super.
Unter Office 10 (2002) jedoch stürzt das Programm sofort mit Aufrufen der Prozedur ab, ohne das der Try-Catch-Mechanismus ein ordentliche Fehlermeldung erzeugt.
Wie kann ich das Problem lösen?
 
Ich hab die Erfahrung gemacht, dass es drauf an kommt, auf welche Version du die Verweise Microsoft.Interopt.Word verweist. Du brauchst die PIA des Office 2002, das sollte dann auch auf 2003 laufen.
Grüsse
 
Folgender Code funktioniert bei mir mit Word 2000 - 2007

Kommt per Copy & Paste aus einem meiner Projekte um eine dot Datei öffnen, mehrere Word Dokumente aneinander zu hängen und anschliessend ein paar Platzhalter mit Daten zu füllen und das Dokument dann anzuzeigen.

Code:
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Merge()
        Dim word_server As Object
        word_server = CreateObject("Word.Application")
        word_server.WindowState = 1
        word_server.Visible = False

        word_server.ChangeFileOpenDirectory(Application.StartupPath & "\reports")
        word_server.Documents.Open( _
                FileName:=Me.Button1.Tag, _
                ConfirmConversions:=False, _
                ReadOnly:=False, _
                AddToRecentFiles:=False, _
                PasswordDocument:="", _
                PasswordTemplate:="", _
                Revert:=False, _
                WritePasswordDocument:="", _
                WritePasswordTemplate:="", _
                Format:=0)
        Dim selection As Object = word_server.Selection
        Dim tmp As DataSet = LxDB.Get_LexDsSQL("Auftrag", "SELECT * FROM F1.FK_Auftrag where SheetNr=" & Me.ABListe.Tag & "")
        Dim row As DataRow = tmp.Tables(0).Rows(0)
        Dim i As Integer = 0
        For Each Field As DataColumn In row.Table.Columns
            Try
                Dim sel As Object = selection.Find
                sel.Text = "[" & Field.ColumnName & "]"
                sel.Forward = True
                sel.MatchWholeWord = True
                sel.Replacement.Text = "" & row(Field.ColumnName)
                sel.Execute(, , , , , , , , , , 2)
            Catch ex As Exception
            End Try
        Next
        word_server.Documents.Save()
        word_server.Visible = True
    End Sub
    Public Sub Merge()
        Dim defaultTemplate As Object = Application.StartupPath & "\vorlage.dot"
        Dim pageBreak As Object = 7
        Dim outputFile As Object = Me.Button1.Tag
        Dim insertPageBreaks As Boolean = True
        Dim i As Integer = 0
        Dim filesToMerge(Me.DocsList.Items.Count) As String
        For i = 0 To Me.DocsList.Items.Count - 1
            If Me.DocsList.Items(i).Checked = True Then
                filesToMerge(i) = Application.StartupPath & "\docs\" & Me.DocsList.Items(i).Text & ".doc"
            End If
        Next
        Dim m, n As Integer
        Dim filesToMerge2(0) As String
        m = 0
        For n = 0 To filesToMerge.Length - 1
            If filesToMerge(n) <> Nothing Then
                ReDim Preserve filesToMerge2(m)
                filesToMerge2(m) = filesToMerge(n)
                m += 1
            End If
        Next
        filesToMerge = filesToMerge2

        ' Create a new Word application
        Dim wordApplication As Object = CreateObject("Word.Application")

        Try
            ' Create a new file based on our template
            Dim wordDocument As Object = wordApplication.Documents.Add(defaultTemplate)

            ' Make a Word selection object.
            Dim selection As Object = wordApplication.Selection

            'Count the number of documents to insert;
            Dim documentCount As Integer = filesToMerge.Length

            'A counter that signals that we shoudn't insert a page break at the end of document.
            Dim breakStop As Integer = 0

            ' Loop thru each of the Word documents
            For Each file As String In filesToMerge
                breakStop += 1
                ' Insert the files to our template
                selection.InsertFile(file)

                'Do we want page breaks added after each documents?
                If insertPageBreaks AndAlso breakStop <> documentCount Then
                    selection.InsertBreak(pageBreak)
                End If
            Next

            ' Save the document to it's output file.
            wordDocument.SaveAs(outputFile)

            ' Clean up!
            wordDocument = Nothing
        Catch ex As Exception
            'I didn't include a default error handler so i'm just throwing the error
            Throw ex
        Finally
            ' Finally, Close our Word application
            wordApplication.Quit()
        End Try
    End Sub
 

Neue Beiträge

Zurück