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]

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.

Visual Studio Team Foundation Server 2017/2015 (TFS) - Komplett 

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!