sexta-feira, 9 de outubro de 2009

Corretor Ortográfico do Word em aplicações ASP.Net

Um recurso muito interessante para nossas aplicações é o corretor ortográfico.
Principalmente quando falamos de gerenciadores de conteúdo.

O .net fornece classes para que se implemente um corretor ortográfico idêntico ao do word (para não dizer que é o mesmo corretor) em suas aplicações com um esforço mínimo de codificação.

Segue o código para implementar o corretor:


       'Instância do objeto Word
        Dim objWord As New Microsoft.Office.Interop.Word.ApplicationClass()
        'Cria um documento em branco
        objWord.Documents.Add()
        'Adiciona o texto no novo documento em branco
        objWord.Selection.TypeText(Me.txtTeste.Text)
        'Aciona a ação de verificação ortográfica
        objWord.Documents.Item(objWord.Documents.Count).CheckSpelling()
        'Retorna o texto corrigido para o textbox
        txtTeste.Text = objWord.Documents.Item(objWord.Documents.Count).Content.Text
        'Fecha o documento sem salvar as alterações no documento em branco que foi criado
        objWord.Documents.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges)
        'Fecha a instância do word
        objWord.Quit()
        'Destrói o objeto word
        objWord = Nothing

É importante adicionar a referência às bibliotecas do Word
Add Reference > COM > Microsoft Word 12.0 Object Library

E importar o namespace.
Imports Microsoft.Office.Interop.Word

Com isso, seu corretor está implementado.

Veja um print da tela.


update:

Versão em C#

Microsoft.Office.Interop.Word.ApplicationClass objWord = new Microsoft.Office.Interop.Word.ApplicationClass();
//Cria um documento em branco
objWord.Documents.Add();
//Adiciona o texto no novo documento em branco
objWord.Selection.TypeText(this.txtTeste.Text);
//Aciona a ação de verificação ortográfica
objWord.Documents.Item(objWord.Documents.Count).CheckSpelling();
//Retorna o texto corrigido para o textbox
txtTeste.Text = objWord.Documents.Item(objWord.Documents.Count).Content.Text;
//Fecha o documento sem salvar as alterações no documento em branco que foi criado
objWord.Documents.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges);
//Fecha a instância do word
objWord.Quit();
//Destrói o objeto word
objWord = null;

Um abraço e até a próxima!

15 comentários:

  1. Existe a possibilidade de disponibilizar esse código para c# ?


    agradeço desde já.

    ResponderExcluir
  2. Olá,

    Você pode converter o código utilizando o site abaixo:

    www(ponto)developerfusion(ponto)com/tools/convert/vb-to-csharp/

    abraços!

    ResponderExcluir
  3. tentei usar aqui e não rolou... ao executar o CheckSpelling nada ocorre e a execução passa para a próxima linha. Nenhum erro mas nada ocorre.

    Como fazer para especificar qual dicionário queremos usar?

    ResponderExcluir
  4. Olá, todas as referências foram devidamente adicionadas?

    Abraços!

    ResponderExcluir
  5. Não funciona talvez com o office 2003 funcioava, mas com o 2007 ele não faz nada, simplesmente ignora só na linha

    objWord.Quit()

    que ele dá uma piscada aparecendo um word sem nada se fechando.

    ResponderExcluir
  6. No Windows 7 a janela abre por traz de tudo!! tem algum jeito de contornar este problema?

    ResponderExcluir
    Respostas
    1. Consegui replicar este comportamento na minha máquina, mas ainda não descobri uma solução para este comportamento no windows 7.

      Assim que descobrir, publico aqui no blog!

      Abraços!

      Excluir
  7. E outra... isso funciona localmente, mas como usar isso online?

    ResponderExcluir
    Respostas
    1. Marquito,

      Consigo usar esse recurso online sem problemas. Mas meu servidor possui o word instalado. É possível que essa solução dependa da instalação do word. Nunca testei em ambientes que não possuam o word. Vale o teste.

      Abraços!

      Excluir
  8. Rafael , acho que estou com problema de permissão , pois quando executo pelo servidor do visual studio o exemplo acima funciona corretamente, porem quando hospedo no IIS ele não abre a tela para corrigir as palavras.
    Sabe o que possa ser?

    ResponderExcluir
    Respostas
    1. Ola Paulo,

      Verifique se o servidor onde o IIS se encontra possui o word instalado.
      É possível que haja dependência da instalação do Word (ou de alguma DLL relacionado a ele).

      Conforme disse em um comentário anterior, todos os meus testes foram realizados em servidores que possuem o word.

      Abraços!

      Excluir
  9. Olá, estou desenvolvendo um programa para lecionar inglês e gostaria que o corretor fizesse a correção em inglês... Só que ao mudar o idioma do corretor ele não muda nada, e volta para o português. Tem alguma propriedade que eu possa mudar para que o corretor corrija em inglês direto?

    ResponderExcluir
    Respostas
    1. Olá Mary,

      Experimente definir as propriedades de idioma(Culture, UICulture...) da sua aplicação para inglês(en-US).

      Excluir
  10. Não consegui converter para c# alguem conseguiu e poderia me mostrar ou enviar?

    ResponderExcluir
  11. não consegui converter para c# alguem conseguiu e poderia passar?

    ResponderExcluir