| |
VB.NET - Ein- und UmsteigerMS Word Code extrem langsam | | | Autor: DrHouse | Datum: 04.12.20 18:33 |
| Guten Abend zusammen!
Ich habe begonnen, VB über Visual Studio 2019 im Rahmen einer Windows Forms App (.Net Framework) zu programmieren. -> Klappt auch soweit ganz gut, da ich aus der VBA-Ecke komme.
Nun habe ich allerdings versucht ein Programm zu schreiben, welches Word-Dokumente auf Ihre Formatierungen hin überprüft.
Läuft auch fehlerfrei, nur läuft es im Verglich zum identen VBA-Code aus dem Word-Dokument heraus EXTREM langsam. Für das laden des Word-Dokumentes nutze ich folgendes Segment:
Dim WordApplication As Word.Application = CreateObject("Word.Application")
Dim WordDocument As Word.Document
WordDocument = WordApplication.Documents.Add("MeinDokumentenname.docx") Später folgt auch ein Aufruf jeden Absatz des Doks durchzugehen und das Format anzupassen, oder neu zuzuweisen:
With WordDocument
For i = 1 To .Paragraphs.Count
If .Paragraphs(i).Format.Style.NameLocal = "Überschrift 1" Then
WordApplication.Selection.Style = "Überschrift 1"
End If
If .Paragraphs(i).Format.Style.NameLocal = "Überschrift 2" Then
WordApplication.Selection.Style = "Überschrift 2"
End If
If .Paragraphs(i).Format.Style.NameLocal = "Überschrift 3" Then
WordApplication.Selection.Style = "Überschrift 3"
End If
Next
End With Warum mache ich das? Ich soll Dokumente überarbeiten und auf ein Einheitliches Format bringen. Jedoch sind viele Überschriften zB auf "Überschrift 3" formatiert, jedoch wurden manuelle Einrückungen eingestellt. Um das wieder gradezubiegen muss ich jeden Absatz auswählen, und ihm das neue Format zuweisen...
Unter VBA rennt das bei einem 120 Seiten Doc in 3 Minuten. Nur kann ich den Code nicht, oder nur sehr schwach schützen. Zudem hab ich mit VBA deutlich weniger Möglichkeiten der Form und Menügestaltung.
Der gleiche Code braucht aber in meiner Form-App 10 Mintuten im gleichen Dokument.
Folgende Verweise hab ich geladen:
MS Forms 2.0 Object Library
MS VBA Extensibility
OLE Autonomation
MS Excel 16 Object Lib (brauch ich später noch für anderes ;)
MS Word 16 Object Lib
Spannend ist jedoch, dass ich ein anderes Projekt für eine Excel-Geschichte bearbeite und da gibt es keine Verzögerung im VB Code im Vergleich zu VBA.
Tests mit
With WordApplication
.Visible = True
.Visible = False
.ScreenUpdating = False
.ScreenUpdating = True
'oder
WordApplication = GetObject(,"Word.Application")
'Anstatt CreateObject wurden alle schon versucht, keine Besserung/Unterschied...
Hat jemand von Euch eine Idee?
Für Hilfe wäre ich Euch sehr dankbar!
So long,
House
Beitrag wurde zuletzt am 04.12.20 um 18:37:29 editiert. | |
Re: MS Word Code extrem langsam | | | Autor: effeff | Datum: 05.12.20 10:44 |
| Vielleicht bringt es schon was, die Aktionen nicht sichtbar zu verarbeiten.
Versuch mal so:
Dim WordApplication As Word.Application = CreateObject("Word.Application")
WordApplication.Visible=False
... Wenn Dein Programm abgearbeitet ist, kannst Du Word mit
WordApplication.Visible=True wieder zur Ansicht bringen, wenn Du es denn brauchst.
EALA FREYA FRESENA | |
Re: MS Word Code extrem langsam | | | Autor: HenryV | Datum: 07.12.20 08:43 |
| Ohne den ganzen Code und Testdateien ist es schwierig eine konkrete Aussage zu machen.
Allgemein bekannt ist aber, dass die Interop-Anbindung langsamer als VBA ist.
Was auch zu Performanceproblemen führt, ist das Ansprechen von Objekten per Index.
Siehe hier -> How to speed up Word Interop processing?
Meine Vorschlage wären:
- Versuche es mit einer ForEach-Schlaufe anstelle einer For-Schlaufe.
oder
- Versuche die Paragraphen in eine Liste, einen Array oder ähnliches zu packen und arbeite mit dieser weiter. (Dies ist die Lösung aus dem oben verlinkten Beitrag)
oder
- Verwende das OpenXML SDK.
Ausserdem schaue dir ElseIf oder SelectCase an, damit könntest du wohl schon einen Teil deiner Abfragen optimieren. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|