2015-10-13 3 views
0

Утро Каждый, Играл с этим в течение нескольких дней и не получал нигде. Я создаю пользовательский richtextbox в vb.net, который будет подчеркивать орфографические ошибки и предлагать предложения, когда право на неправильное слово будет нажато (я не могу поверить, что это не по умолчанию в текстовых окнах/richtextboxes ... в любом случае). У меня есть подчеркивание, работающее хорошо, но я продолжаю получать ошибку: эта команда недоступна, потому что никакой документ не открыт.Word Interop GetSpellingSuggestions no open document error

EDIT

работает на рабочем столе, 64 бит, офис 2007 установлен. Вот весь класс и как я тестирую вызов. IsWordWrong отлично работает. SpellingSuggestions терпит неудачу на wapp.GetSpellingSuggestions (pWord) с ошибкой «Эта команда недоступна, поскольку документ не открыт», который в соответствии с MSDN и несколько учебных пособий, которые я видел, не должно произойти:

Public Class SpellCheckUtility 

Private Shared wapp As Word.Application 
Private Shared missing As Object = Reflection.Missing.Value 

Public Shared Sub StartApp() 
    If IsNothing(wapp) Then 
     wapp = New Word.Application 
     wapp.Visible = False 
     wapp.WindowState = 0 

    End If 
End Sub 

Public Shared Function IsWrongWord(ByVal pWord As String) As Boolean 
    StartApp() 
    Dim oFalse As Object = False 
    Dim activedoc As Word.Document = wapp.Documents.Add(, , , oFalse) 

    Dim m_range As Word.Range 
    m_range = activedoc.Range 
    m_range.InsertAfter(pWord) 

    Dim SpellErrors As Word.ProofreadingErrors = m_range.SpellingErrors 

    Return SpellErrors.Count > 0 
End Function 

Public Shared Function SpellingSuggestions(ByVal pWord As String) As Generic.List(Of String) 
    Dim rtnlist As New Generic.List(Of String) 

    If pWord.Length > 0 Then 
     StartApp() 

     Dim SpellErrors As Word.SpellingSuggestions = wapp.GetSpellingSuggestions(pWord) 

     For m_word As Integer = 1 To SpellErrors.Count 
      rtnlist.Add(SpellErrors.Item(m_word).Name) 
     Next 
    End If 

    Return rtnlist 
End Function 
Public Shared Sub dispose() 
    If Not (wapp Is Nothing) Then 
     Dim m_saveChanges As Object = False 
     wapp.Quit(m_saveChanges) 
     wapp = Nothing 
    End If 
End Sub 
End Class 

Как называется:

Private Sub btnclick1_Click(sender As Object, e As EventArgs) Handles btnclick1.Click 
    Dim wordlist As Generic.List(Of String) = SpellCheckUtility.SpellingSuggestions("thingz") 
End Sub 

Я пробовал как wapp.GetSpellingSuggestions, так и m_range.GetSpellingSuggestions с одинаковыми результатами. Я использую m_range.SpellingErrors где-то в другом месте, и это работает отлично, и настройка для получения диапазона точно такая же, поэтому не уверен, что я делаю неправильно.

Любая помощь ВОЗМОЖНО!

** адаптируя этот код к тому, что я на самом деле хочу http://www.codeproject.com/Articles/18799/Spell-check-and-underline-the-wrong-word-using-Mic

+0

Является ли WPF опцией? WPF имеет проверку орфографии, встроенную в 'RichTextBox'es. –

+0

Я так не верю ..? программа основана на формах окон и массивных (10+ лет, миллионы строк кода). Посмотрел пару примеров интеграции wpf-управления в базу окон, но выглядел более сложным, чем это, и хотел бы сохранить все то же самое, что и база. – Bulsatar

+0

Я понимаю, что код, который вы пытаетесь подражать, отлично работает; почему бы не начать с этого (= рабочая версия) и продолжать удалять/добавлять функции? Например: зачем писать 'Dim activedoc As Word.Document = wapp.Documents.Add (,,, oFalse)', а не исходные версии? ('m_app.Documents.Add()' или 'm_app.Documents.Add_ (m_template, m_newTemplate, m_documentType, m_visible)')? 'Documents.Add' может включать пустой документ или загружать файл Word из заданного пути; и кажется, что ваш код не полностью определен на этом фронте (нет пути, хотя некоторые аргументы) ... – varocarbas

ответ

0

whooohoo для 64-битных против 32-битный офис установки причуды! Таким образом, мой dev-машина - 64, но моя офисная установка - 32. По-видимому, interop просто не нравится эта настройка и (здесь, по предположению), у нее отсутствует папка для размещения временного открытого документа при использовании wapp.Documents.Add(), следовательно ошибка открытого документа. Вместо создания самой папки, как и должно ... и действительно проверки орфографии должны быть по умолчанию да/нет в свойствах всех элементов управления вводами текста ... серьезно, он просто терпит неудачу.

Повторите, вот строка, которую я добавил в начало функции StartApp(), и теперь все работает отлично.

If Not IO.Directory.Exists("C:\Windows\SysWOW64\config\systemprofile\") Then IO.Directory.CreateDirectory("C:\Windows\SysWOW64\config\systemprofile\") 
Смежные вопросы