Feedback

C# - Rechtschreibprüfung mit Word

Veröffentlicht von am 02.06.2007
(0 Bewertungen)
Dieses Snippet macht die Rechtschreibprüfung von Microsoft Word für eigene Anwendungen direkt nutzbar.
Microsoft Word 2000 oder höher muss installiert sein.

Die Anwendung ist denkbar einfach:

1. Variable für Word-Instanz anlegen

object wordApp;

2. Microsoft Word im Hintergund starten

wordApp=SpellChecker.StartWinword();

3. Text auf Rechtschreibfehler prüfen

IList<string> wrongWords=SpellChecker.CheckSpelling("Hallo Welt!",wordApp);

4. Microsoft Word schließen

SpellChecker.QuitWinword(wordApp);

Die Funktion CheckSpelling gibt eine String-Liste zurück, die alle falsch geschriebenen Wörter des Textes enthält.

Eine Visual Studio 2005-Projektmappe mit Beispiel-Applikation gibts unter: http://www.mycsharp.de/wbb2/thread.php?postid=203053#post203053
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

VB.NET 2017/2015/2013 Komplett

Ziel des Seminars ist der flexible Umgang mit VB.NET, wie z.B. die damit verbundene eigenständige Entwicklung von Programmen oder das Verwenden von Datenbanken.

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;

/// <summary>
/// Rechtschreibprüfung mit Word.
/// </summary>
public class SpellChecker
{
    /// <summary>
    /// Startet Microsoft Word im Hintergrund und gibt ein Word.Application-Objekt davon zurück.
    /// </summary>
    public static object StartWinword()
    {
        // Typen-Information für Word abfragen 
        Type wordType = Type.GetTypeFromProgID("Word.Application");

        // Wenn Word installiert ist ...
        if (wordType != null)
        {
            // Word-Instanz erzeugen
            object wordApp=Activator.CreateInstance(wordType);

            // Dokumenten-Auflistung adressieren
            object documents = wordType.InvokeMember("Documents", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, wordApp, new object[0]);

            // Leeres Dokument einfügen
            documents.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, documents, new object[0]);

            // Word-Instanz zurückgeben
            return wordApp;
        }
        else
            // Ausnahme werfen
            throw new ApplicationException("Microsoft Word ist nicht installiert! Die Rechtschreibprüfung benötigt Microsoft Word.");
    }

        /// <summary>
        /// Beendet eine bestimmte Instanz von microsoft Word.
        /// </summary>
        /// <param name="wordApp">Word.Application-Objekt</param>
        public static void QuitWinword(object wordApp)
        {
        // Typen-Information des Word.Application-Objekt ermitteln
        Type wordType = wordApp.GetType();

        // Dokumenten-Auflistung adressieren
        object documents = wordType.InvokeMember("Documents", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, wordApp, new object[0]);
        
        // Leeres Dokument einfügen
        documents.GetType().InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, documents, new object[0]);

        // Word schließen
        wordType.InvokeMember("Quit", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, wordApp, new object[1] { 0 });

        // Word-Instanz entsorgen
        Marshal.FinalReleaseComObject(wordApp);
    }

    /// <summary>
    /// Führt eine Rechtschreibprüfung für einen bestimmten Text durch.
    /// </summary>
    /// <param name="wordApp">Word.Application-Objekt</param>
    /// <param name="text">Text</param>
    /// <returns>Liste der Wörter, die falsch geschrieben sind</returns>
    public static IList<string> CheckSpelling(object wordApp, string text)
    { 
        // Typen-Information des Word.Application-Objekt ermitteln
        Type wordType = wordApp.GetType();

        // Liste für falsche Wörter erzeugen
        IList<string> wrongWords=new List<string>();

        // Sonderzeichen aus Text entfernen
        text = text.Replace('.', ' ');
        text = text.Replace(',', ' ');
        text = text.Replace(':', ' ');
        text = text.Replace(';', ' ');
        text = text.Replace('"', ' ');
        text = text.Replace('(', ' ');
        text = text.Replace(')', ' ');
        text = text.Replace('[', ' ');
        text = text.Replace(']', ' ');
        text = text.Replace('!', ' ');
        text = text.Replace('?', ' ');
        text = text.Replace('/', ' ');
        text = text.Replace('\n', ' ');

        // Text in Wörter zerlegen
        string[] words = text.Split(' ');
                    
        // Alle Wörter durchlaufen
        foreach (string word in words)
        {
            // Rechtschreibung des Wortes prüfen 
            bool spellCheckResult = (bool)wordType.InvokeMember("CheckSpelling", BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, wordApp, new object[1] { word });

            // Wenn das Wort nicht richtig geschrieben ist ...
            if (!spellCheckResult)
            {
                // Wort zur Liste zufügen
                wrongWords.Add(word.Trim());
            }
        }
        // Liste zurückgeben
        return wrongWords;            
    }
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!