2015-10-13 1 views
0

Matin Tout le monde, Vous avez joué avec ça pendant quelques jours et vous ne savez où. Je crée une riche zone de texte personnalisée dans vb.net qui soulignera les fautes d'orthographe et offrira des suggestions lorsque le mot mal orthographié sera cliqué (je ne peux pas croire que ce n'est pas par défaut dans les textboxes/richtextboxes ... de toute façon). J'ai le soulignement fonctionnant bien mais je continue à obtenir l'erreur: Cette commande n'est pas disponible parce qu'aucun document n'est ouvert.Word Interop GetSpellingSuggestions pas d'erreur de document ouvert

EDIT

en cours d'exécution sur le bureau, 64 bits, Office 2007 est installé. Voici la classe entière et comment je teste l'appel. IsWordWrong fonctionne très bien. SpellingSuggestions échoue sur wapp.GetSpellingSuggestions (PWord) avec l'erreur « Cette commande n'est pas disponible car aucun document est ouvert » qui, selon MSDN et plusieurs tutoriels que j'ai vu, ne devrait pas se produire:

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 

Comment appelle:

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 

J'ai essayé les deux wapp.GetSpellingSuggestions et m_range.GetSpellingSuggestions avec les mêmes résultats. J'utilise m_range.SpellingErrors ailleurs et cela fonctionne très bien et la configuration pour obtenir la gamme est exactement la même, donc je ne sais pas ce que je fais mal.

Toute aide est grandement appréciée !!

** adapter ce code à ce que je veux réellement http://www.codeproject.com/Articles/18799/Spell-check-and-underline-the-wrong-word-using-Mic

+0

WPF est-il une option? WPF a une vérification orthographique intégrée à 'RichTextBox'es. –

+0

Je ne crois pas ..? le programme est basé sur des formulaires Windows et massif (10+ ans, des millions de lignes de code). Considéré quelques exemples d'intégration d'un contrôle wpf dans une base de formulaires Windows, mais semblait plus compliqué que cela et voudrait garder tout comme base. – Bulsatar

+0

Je comprends que le code que vous essayez d'émuler fonctionne bien; pourquoi ne pas partir de ceci (= une version de travail) et continuer à supprimer/ajouter des fonctionnalités? Par exemple: pourquoi écrire 'Dim activedoc As Word.Document = wapp.Documents.Add (,,, oFalse)' plutôt que les versions originales? ('m_app.Documents.Add()' ou 'm_app.Documents.Add_ (m_template, m_newTemplate, m_documentType, m_visible)')? 'Documents.Add' peut inclure un document vide ou charger un fichier Word à partir d'un chemin donné; et il semble que votre code ne soit pas complètement défini sur ce front (pas de chemin fourni, bien que quelques arguments) ... – varocarbas

Répondre

0

whooohoo pour 64bit vs bureau 32bit installer bizarreries! Donc ma machine dev est 64 mais mon installation de bureau est 32. Apparemment, l'interop n'aime pas cette configuration et (ici on devine) il manque un dossier pour placer le document open doc lors de l'utilisation de wapp.Documents.Add() d'où l'erreur doc non ouverte. Au lieu de créer le dossier lui-même, comme il se doit ... et les vérifications d'orthographe devraient être un indicateur oui/non par défaut dans les propriétés de tous les contrôles de saisie de texte maintenant ... sérieusement, il échoue juste.

Rant sur, voici la ligne que j'ai ajouté au début de la fonction StartApp() et tout fonctionne bien maintenant.

If Not IO.Directory.Exists("C:\Windows\SysWOW64\config\systemprofile\") Then IO.Directory.CreateDirectory("C:\Windows\SysWOW64\config\systemprofile\")