Spell Checking in C# Using Word Interop

删除回忆录丶 提交于 2019-12-18 03:44:09

问题


I am writing a spell check application in C# using word.dll (the Word Interop API).

I want to check which spellings are incorrect and accordingly get suggestions for the incorrect words.

I got a sample code from the net and I cannot understand the parameters for the following command:

Microsoft.Office.Interop.Word._Application.GetSpellingSuggestions
   (string, ref object, ref object, ref object, ref object, ref object, 
       ref object, ref object, ref object, ref object, ref object, ref object, 
       ref object, ref object)

I would just like to know what do all the ref objects imply? I want to know their meaning.


回答1:


I worked with this the other day and thought I would like to share my findings and add a bit to the already given answers.

You ask:

I want to check which spellings are incorrect and accordingly get suggestions for the incorrect words.

(...)

I would just like to know what do all the "ref object"s imply? I want to know their meaning.

The short answer to this is - look in the documentation.

To show you how the GetSpellingSuggestions method can be used in a more complete context, I have included a sample program in the following. Please note that you can change the desired proofing language using the language variable. The code goes as follows:

using System;
using Microsoft.Office.Interop.Word;

namespace WordStack
{
    public class Program
    {
        private static void Main()
        {
            // Create a new Word application instance (and keep it invisible)
            var wordApplication = new Application() { Visible = false };

            // A document must be loaded
            var myDocument = wordApplication.Documents.Open(@"C:\...\myDoc.docx");

            // Set the language
            var language = wordApplication.Languages[WdLanguageID.wdEnglishUS];

            // Set the filename of the custom dictionary
            // -- Based on:
            // http://support.microsoft.com/kb/292108
            // http://www.delphigroups.info/2/c2/261707.html
            const string custDict = "custom.dic";

            // Get the spelling suggestions
            var suggestions = wordApplication.GetSpellingSuggestions("overfloww", custDict, MainDictionary: language.Name);

            // Print each suggestion to the console
            foreach (SpellingSuggestion spellingSuggestion in suggestions)
                Console.WriteLine("Suggested replacement: {0}", spellingSuggestion.Name);

            Console.ReadLine();
            wordApplication.Quit();
        }
    }
}

... which give me the following three suggestions: overflow, overflows, and overflown.

The given sample has been implemented using .NET 4.5 and version 15 of the Word Interop API (Office 2013).

Please notice that the given sample also solves your comment to one of the already given answers, saying:

(...) It is working. But the Microsoft Word application is popping up for every word. Is there any way to get spelling suggestion without letting the Microsoft application window pop up??

Personally, I have not experienced that behavior (neither with the GetSpellingSuggestions nor the CheckSpelling methods available on the Application instance).

However, if you invoke CheckSpelling on a Document instance, it will, as covered in the documentation, display the Spelling dialog if one or more misspelled words are found (given that you, during construction of the Word Application instance, assigned the Visible property to true - otherwise, it will await input in the background causing the application to "freeze").




回答2:


Update: So it seems you need to get the first spelling suggestion from word. I checked this article and I deduce you would need to do something like this:

Word.SpellingSuggestions listOfSuggestions = 
                                  app.GetSpellingSuggestions(searchStr);
listOfSuggestions.Items[0].Name;//should contain the first suggestion

So from the msdn docs:

Syntax 1

expression.GetSpellingSuggestions(CustomDictionary, IgnoreUppercase, 
    MainDictionary, SuggestionMode, CustomDictionary2  CustomDictionary10)

Result: Returns a SpellingSuggestions collection that represents the words suggested as spelling replacements for the first word in the specified range.

Syntax 2

expression.GetSpellingSuggestions(Word, CustomDictionary, IgnoreUppercase,
 MainDictionary, SuggestionMode, CustomDictionary2  CustomDictionary10)

Result:Returns a SpellingSuggestions collection that represents the words suggested as spelling replacements for a given word.

Note: If you use anything earlier than .NET4 then you'll have to use Missing.Value for the parameters you want empty/null. As of .NET4 we've got optional parameters and when you add a reference to the Office Library, the interop wrapper will have overloads based on the optional parameters.




回答3:


    SpellingSuggestions GetSpellingSuggestions(
        string Word,
        ref Object CustomDictionary,
        ref Object IgnoreUppercase,
        ref Object MainDictionary,
        ref Object SuggestionMode,
        ref Object CustomDictionary2,
        ref Object CustomDictionary3,
        ref Object CustomDictionary4,
        ref Object CustomDictionary5,
        ref Object CustomDictionary6,
        ref Object CustomDictionary7,
        ref Object CustomDictionary8,
        ref Object CustomDictionary9,
        ref Object CustomDictionary10

)


来源:https://stackoverflow.com/questions/9718687/spell-checking-in-c-sharp-using-word-interop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!