none
VB.net; wie kann man Rechtschreibprüfung und Silbentrennung verwenden RRS feed

  • Frage

  • Hallo zusammen,

    ich habe in SQL-Tabellen recht umfangreiche Texte gespeichert, die ich via VB in Forms anzeigen möchte.
    Da würde ich gerne beim Anzeigen eine Rechtschreibprüfung und Silbentrennung einbauen.

    Google führt mich immer nur NHunspell, aber die meisten der zugehörigen Websites werden als gefährlich gekennzeichnet.
    Wo/wie kann ich da auf entsprechende Tools zugreifen?
    Übrigens habe ich unter VBA im WORD einen sogenannten Hyphenator zur Verfügung, der auch funktioniert, sich aber nicht in VB.net überführen lässt...

    Für Hinweise dankbar
    Grüße-


    Dietrich

    Mittwoch, 12. August 2020 14:18

Alle Antworten

  • Hallo Dietrich,

    Hast Du versucht, die Word.DLL-Bibliothek und ihre SpellChecking-Methode in Deinem Win Forms-Anwendung zu verwenden, wie in diesem Artikel beschrieben:
    Visual Basic Spell Check Enabled Rich Text Box Custom Control

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 13. August 2020 13:07
    Moderator
  • Danke für den Tipp, Ivan.

    Habe Demo heruntergeladen und werde nun mal probieren...

    Gibt's auch was für Silbentrennung?

    Grüße-


    Dietrich

    Donnerstag, 13. August 2020 15:30
  • Hallo Ivan,

    leider beim ersten Versuch von SpellCheckCCVB (Word 2007) folgender Fehler:

    System.InvalidCastException
      HResult=0x80004002
      Nachricht = Das COM-Objekt des Typs "Microsoft.Office.Interop.Word.ApplicationClass" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Word._Application" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{00020970-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Bibliothek nicht registriert. (Ausnahme von HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).
      Quelle = mscorlib
      Stapelüberwachung:
       at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
       at Microsoft.Office.Interop.Word.ApplicationClass.set_Visible(Boolean prop)
       at SpellCheckVB.SpellCheckVB.CheckSpelling() in C:\TestVB\SpellCheckVB\SpellCheckVB\SpellCheckVB.vb:line 115
       at SpellCheckVB_Test.Form1.tspSpellCheck_Click(Object sender, EventArgs e) in C:\TestVB\SpellCheckVB\SpellCheckVB_Test\Form1.vb:line 11
       at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
       at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
       at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
       at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
       at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ToolStrip.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() in f:\dd\vb\runtime\msvbalib\ApplicationServices\WindowsFormsApplicationBase.vb:line 779
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() in f:\dd\vb\runtime\msvbalib\ApplicationServices\WindowsFormsApplicationBase.vb:line 1472
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) in f:\dd\vb\runtime\msvbalib\ApplicationServices\WindowsFormsApplicationBase.vb:line 544
       at SpellCheckVB_Test.My.MyApplication.Main(String[] Args) in :line 81

    Grüße-


    Dietrich

    Donnerstag, 13. August 2020 15:41
  • Hallo Dietrich,

    Du kannst die Lösung für diesen Fehler auprobieren, die von josmongeorge im folgenden Thread bereitgestellt wird:
    8002801d automation error - library not registered
    Wenn das Problem dadurch nicht behoben wird, ist es empfehlenswert, Microsoft Office zu reparieren oder neu zu installieren.

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 19. August 2020 12:33
    Moderator
  • Danke, Ivan, für den Hinweis.

    Mit dem Reparieren hat es diesmal geklappt (ich sage diesmal, weil ich es vor Wochen schon mal propierte - ohne Erfolg).
    Allerdings beim Outlook funktioniert immer noch nichts. Ich sende mal in Kürze etwas diesbezüglichen Code, der mich etwas irritiert, weil auch das manchmal klappt manchmal nicht...

    Grüße-


    Dietrich

    Mittwoch, 19. August 2020 15:29
  • Wie angesagt hier mal die Problematik mit Outlook:

    Diese Code-Snippet stammt aus einem Projekt wo alles in dieser Form super läuft:

    		Dim oApp As Outlook.Application = Nothing
    		Dim oInbox As Outlook.MAPIFolder = Nothing
    		Dim oItems As Outlook.Items = Nothing
    
    		'Create Outlook application. 
    		oApp = New Outlook.Application()
    		Dim oNS As Outlook.NameSpace = oApp.GetNamespace("mapi")

    Beim nächsten Snippet kommt der Fehler immer in der Zeile mit dem NameSpace:

    		Dim oApp As Outlook.Application
    		Dim fld As Outlook.MAPIFolder
    		Dim msg As Outlook.MailItem
    		Dim zz As Integer
    
    		'Verweis auf Outlook
    		oApp = New Outlook.Application()
    		Dim oNS As Outlook.NameSpace = oApp.GetNamespace("mapi")
    		'Select Outlookfolder für den Export
    		fld = oNS.PickFolder
    
    		Dim fs = CreateObject("Scripting.FileSystemObject")
    		Dim Exp = fs.CreateTextFile(FileWithPath, True)

    Warum der Fehler in diesem zweiten Projekt, kommt ist unklar.

    Fehlermeldung: 
    System.InvalidCastException: "Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Outlook.Application" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{00063001-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Bibliothek nicht registriert. (Ausnahme von HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))."

    Bei beiden Projekten sind die entsprechenden Verweise identisch und es wird  Imports Microsoft.Office.Interop  gemacht.

    Grüße-


    Dietrich


    • Bearbeitet dherrmann Donnerstag, 20. August 2020 07:27
    Donnerstag, 20. August 2020 07:22