Некоторые языки не работают при использовании проверки правописания Word 2007 из Interop - PullRequest
4 голосов
/ 24 марта 2010

Я использую проверку орфографии Word 2007 через Interop в настольном приложении VB.net. При использовании языка по умолчанию (английский) он работает нормально. Если я установлю язык на французский через LanguageId, он тоже будет работать. Но если я установлю его на французский (канадский) (Word.WdLanguageID.wdFrenchCanadian), он не будет работать. Там нет сообщения об ошибке, он просто запускается и говорит, что документ не содержит ошибок.

Я знаю, что делает, если я вставляю тот же самый текст в сам Word и запускаю его с французским (канадским) словарем, он находит ошибки. Почему этот словарь не работает, для меня загадка.

Полный код ниже:

Public Shared Function SpellCheck(ByVal text As String, ByVal checkGrammar As Boolean) As String
    ' If there is no data to spell check, then exit sub here.
    If text.Length = 0 Then
        Return text
    End If

    Dim objWord As Word.Application
    Dim objTempDoc As Word.Document
    ' Declare an IDataObject to hold the data returned from the 
    ' clipboard.
    Dim iData As IDataObject

    objWord = New Word.Application()
    objTempDoc = objWord.Documents.Add
    objWord.Visible = False

    ' Position Word off the screen...this keeps Word invisible 
    ' throughout.
    objWord.WindowState = 0
    objWord.Top = -3000
    ' Copy the contents of the textbox to the clipboard
    Clipboard.SetDataObject(text)
    ' With the temporary document, perform either a spell check or a 
    ' complete
    ' grammar check, based on user selection.
    With objTempDoc
        .Content.Paste()
        .Activate()
        .Content.LanguageID = Word.WdLanguageID.wdFrenchCanadian
        If checkGrammar Then
            .CheckGrammar()
        Else
            .CheckSpelling()
        End If
        ' After user has made changes, use the clipboard to
        ' transfer the contents back to the text box
        .Content.Copy()
        iData = Clipboard.GetDataObject
        If iData.GetDataPresent(DataFormats.Text) Then
            text = CType(iData.GetData(DataFormats.Text), _
                String)
        End If
        .Saved = True
        .Close()
    End With
    objWord.Quit()
    Return text

End Function

1 Ответ

0 голосов
/ 25 марта 2010

Установлены ли языки, которые не работают, для проверки орфографии?

А если вы попытаетесь сменить язык например на немецкий? (или итальянский, но не итальянский (Швейцария))

...