[VB.NET] Export nach Word langsam bzw langsamer werdend

deusfalsus

Erfahrenes Mitglied
Mahlzeit!

Ich exportiere den Inhalt einer DataTable in eine Worddatei.
Dazu lege ich, nachdem ich die Überschrift etc geschrieben habe, eine Tabelle an setze den Cursor in die erste (Daten-)Zelle.
Im Schleifendurchlauf wird dann immer ein Wert eingetragen und anschließend zur nächsten Zelle gesprungen.
Anfangs geht das recht flott. Bei den ersten beiden Zeilen kommt man mit dem Auge kaum mit. Doch die Geschwindigkeit nimmt schnell ab und nach ca 20 Zeilen dauert eine Zeile (12 Spalten) schon über eine Sekunde, nach ca 70 Zeilen benötigt das Füllen einer Zeile schon ganze vier Sekunden.
Zum glück habe ich derzeit nur um die 80 Zeilen, aber das könnte bald mehr werden.

Woran könnte es liegen und v.a. wie beseitige ich dieses Ärgernis?
 
Zeige das Word-Dokument nicht gleich an, sondern erst, wenn die Einträge gemacht wurden. Sonst kommt da natürlich immer wieder ein Refresh dazu.
 
Dann solltest du deinen Code herzeigen, damit man sieht was du machst und daraus vielleicht etwas ableiten kann.
 
Visual Basic:
Dim m_wdApp As Word.Application
        Dim m_wdDatei As Word.Document
        Dim m_wdTabelle As Word.Table


        m_wdApp = New Word.Application()
        m_wdDatei = m_wdApp.Documents.Add

        m_wdDatei.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
        m_wdApp.ActiveWindow.ActivePane.View.Zoom.PageFit = WdPageFit.wdPageFitFullPage
        m_wdApp.Options.CheckSpellingAsYouType = False
        m_wdApp.Options.CheckGrammarAsYouType = False

        Dim Merker1 As Byte = m_wdApp.Selection.Font.Size
        Dim Merker2 As Boolean = m_wdApp.Selection.Font.Bold
        With m_wdApp
            .Selection.Font.Size = 14
            .Selection.Font.Bold = True
            .Selection.TypeText("Verfügbare TAK")
            .Selection.Font.Size = Merker1
            .Selection.Font.Bold = Merker2
            .Selection.TypeParagraph()
            .Selection.TypeText("Stand: " & DateAndTime.DateString & " " & TimeOfDay)
            .Selection.TypeParagraph()
            .Selection.TypeParagraph()

        End With
        m_wdTabelle = m_wdDatei.Tables.Add(m_wdApp.Selection.Range, 2, KonsTab.Columns.Count - 1)
        m_wdApp.Selection.Rows.HeadingFormat = True
        m_wdDatei.ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekCurrentPageFooter
        With m_wdApp
            .NormalTemplate.AutoTextEntries("Seite X von Y").Insert(Where:=m_wdApp.Selection.Range, RichText:=True)
            .Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter
            .ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekMainDocument
        End With

        For i = 1 To KonsTab.Columns.Count - 1
            m_wdApp.Selection.TypeText(KonsTab.Columns.Item(i).Caption)
            m_wdTabelle.Columns.AutoFit()
            m_wdApp.WordBasic.nextcell()
        Next

        For r = 0 To KonsTab.Rows.Count - 1
            For c = 1 To KonsTab.Columns.Count - 1
                On Error Resume Next
                m_wdApp.Selection.Text = KonsTab.Rows(r).Item(c)
                m_wdTabelle.Columns.AutoFit()
                m_wdApp.WordBasic.nextcell()
            Next
        Next

        m_wdApp.Visible = True
        m_wdApp.ShowMe()
 
Problem gelöst.
Hab nach Erzeugen der Tabellen eingefügt:
Visual Basic:
m_wdApp.Selection.Tables(1).AutoFitBehavior(WdAutoFitBehavior.wdAutoFitContent)
und dafür den nach jedem Eintrag efolgten AutoFit entfernt.
Dadurch läuft es unvergleichbar schneller.
Zwar wird es gegen Ende etwas langsamer, aber kaum merklich.
 

Neue Beiträge

Zurück