Visual Basic 6 - Localizando textos em arquivos com o Word
O nome deste artigo deveria ser : "Parasitando o Word" . Por quê ? porque eu vou usar os recursos do Word para efetuar a localização de texto em arquivos para atingir o meu objetivo.
O Word é o processador de texto padrão do mercado e quase todo mundo tem uma cópia instalada (legalizada já é outra história...). Muitas vezes o usuário usa somente uns 20% dos recursos que o Word possui , então ele fica ali quietinho instalado sem fazer quase anda o tempo inteiro a não ser servir como um editor de textos.
Pois neste programa eu vou por o Word para trabalhar usando o recurso de localizar textos que ele possui. Vou criar uma aplicação Visual Basic na qual o usuário seleciona os arquivos nos quais deseja procurar um texto , informa o texto e a seguir clica no botão localizar. Neste momento o Word entra em ação e usando a automação OLE eu cria uma instância do Word na minha aplicação VB e efetuo a busca do texto. Ao final temos a opção de abrir o documento no Word. Funciona em 90% dos casos. Se quiser 100% terá que codificar você mesmo a rotina de busca e abertura de arquivos.
O formulário principal da nossa aplicação usara os controles : DriveListBox , DirListBox , FileListBox , ListBox , CommandButton , TextBox e terá a seguinte aparência:
A interface é simples e intuitiva.
Vamos agora ao código . Ele esta comentado e por isto irei me ater somente ao essencial :
As rotinas relacionadas aos controles DirListBox , FileListBox e DriveListBox são :
Private
Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() List1.Clear End Sub |
A rotina cmdLocaliza é mais importante do aplicativo ela localiza o texto nos arquivos ; seu código é dado a seguir :
Private
Sub cmdLocaliza_Click() 'define as variáveis usadas nesta rotina Dim wd As New Word.Application Dim intervalo As Word.Range Dim i As Integer Dim j As Integer Dim k As Integer Dim strCaminho As String Dim NumArquivos As Integer Dim strBufferArquivo() As String Dim strMsg As String On Error GoTo trata_erro List1.Clear 'se não informou o texto emite aviso ao usuario If txtTexto.Text = "" Then strMsg = "Não foi informado nenhum texto para localizar." & vbCrLf & vbCrLf strMsg = strMsg & "Informe um texto." MsgBox strMsg, vbCritical, "Texto não informado" txtTexto.SetFocus Exit Sub End If 'obtem a quantidade de arquivos exibidas no componente file1 i = File1.ListCount For j = 0 To i - 1 'verifica se o arquivo esta selecionado If File1.Selected(j) = True Then 'se estiver selecionado então incrementa o contador de arquivos NumArquivos = NumArquivos + 1 End If Next j 'se não selecionou nenhum arquivo avisa If NumArquivos = 0 Then strMsg = "Não foi selecionado nenhum arquivo para busca." & vbCrLf & vbCrLf strMsg = strMsg & "Selecione um ou mais arquivos " strMsg = strMsg & "files." MsgBox strMsg, vbCritical, "Arquivo(s) não selecionado(s)" File1.SetFocus Exit Sub End If 'redefina o array com o numero de arquivos selecionados ReDim strBufferArquivo(NumArquivos - 1) For j = 0 To i - 1 'verifica se o arquivo esta selecionado e inclui o caminho completo do arquivo no array If File1.Selected(j) = True Then strBufferArquivo(k) = File1.Path & "\" & File1.List(j) k = k + 1 End If Next j 'zera as variáveis i = 0 j = 0 k = 0 'inicia um laço com o número de arquivos selecionados For j = 0 To UBound(strBufferArquivo) 'pega o caminho do arquivo e nome do arquivo strCaminho = strBufferArquivo(j) 'desabilita o botão localiza cmdLocaliza.Enabled = False frmMain.MousePointer = vbHourglass frmMain.Caption = "Procurando... " & strCaminho 'abre o documento no word wd.Documents.Open (strCaminho) wd.Documents(1).Activate 'define o intervalo para busca Set intervalo = wd.ActiveDocument.Content 'tenta localizar a palavra no word intervalo.Find.Execute FindText:=txtTexto.Text, Forward:=True While intervalo.Find.Found = True i = i + 1 intervalo.Find.Execute FindText:=txtTexto.Text Wend ' se localizou o texto inclui o caminho e nome do arquivo na caixa de listagem If i > 0 Then List1.AddItem strCaminho i = 0 Else List1.AddItem "Nada foi localizado para sua seleção" End If Next j 'encerra e fecha o word wd.Quit Set wd = Nothing frmMain.Caption = "Localização completa." frmMain.MousePointer = vbDefault cmdLocaliza.Enabled = True Exit Sub trata_erro: MsgBox " Ocorreu um erro durante a busca do texto : " & Err.Description, vbCritical, "Erro ao localizar texto" frmMain.MousePointer = vbDefault End Sub |
Outra rotina importante é cmdAbrirDocumento - que abre o documento selecinado. Seu código é o seguinte :
Private
Sub cmdAbrirDocumento_Click() Dim wd As New Word.Application On Error GoTo cmdAbrirDocumentoErr 'abre o documento selecionado no word If List1.Selected(List1.ListIndex) = True Then wd.Documents.Open (List1.List(List1.ListIndex)) wd.Visible = True End If Exit Sub cmdAbrirDocumentoErr: Select Case Err.Number Case 381 MsgBox "Selecione um documento.", vbCritical, "Erro ao selecionar documento" List1.SetFocus End Select End Sub |
Private
Sub List1_DblClick() Dim wd As New Word.Application 'abre o documento selecionado no word (duplo click) If List1.Selected(List1.ListIndex) = True Then wd.Documents.Open (List1.List(List1.ListIndex)) wd.Visible = True End If End Sub |
Abre o documento selecionado |
Abre o documento com duplo click |
Abaixo a rotina para encerrar a aplicação:
Private
Sub cmdSair_Click() If (MsgBox("Confirma saida do sistema ?", vbYesNo, "Encerra Sistema")) = vbYes Then End End If End Sub |
A seguir uma imagem que representa a aplicação em ação localizando e abrindo o documento com o Word:
Agora o resto é com você até o próximo artigo
... ( a
aplicação completa esta no Super DVD Visual Basic)
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
FSO - Tratando drives, diretórios e arquivos - Macoratti.net