Ir ao conteúdo
  • Cadastre-se
ErickSant

Excel macro utilizando ocr+ vba

Recommended Posts

Prezados,

boa tarde,

 

Preciso idetentificar 2 campos específicos de um PDF e procura-los em um arquivo em excel. Minha dúvida é como fazer isso de forma automática, li sobre a tecnologia OCR mas não consegui achar um programa gratuito para realizar testes.

Alguém poderia me ajudar ?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue exemplo generico, que abre o arquivo pdf especificado, copia e cola no Excel.

 

Estou considerando que utiliza o adobe acrobat reader para ler os arquivos pdf. 

 

Alteres a variaveis, como diretório, nome dos arquivos, etc. 

 

Sub StartAdobe()
Dim AdobeApp As String
Dim AdobeFile As String
Dim StartAdobe
 
AdobeApp = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
AdobeFile = "C:\Temp\BACKUP\out123.pdf"
 
StartAdobe = Shell("" & AdobeApp & " " & AdobeFile & "", 1)
 
Application.OnTime Now + TimeValue("00:00:05"), "FirstStep"
End Sub
Private Sub FirstStep()
SendKeys ("^a")
SendKeys ("^c")
 
Application.OnTime Now + TimeValue("00:00:10"), "SecondStep"
 
End Sub
 
Private Sub SecondStep()
SendKeys ("%fx")
AppActivate "Microsoft Excel"
ThisWorkbook.Activate
Sheets(1).Activate
Range("A1").Activate
SendKeys ("^v")
End Sub

 

Execute startAdobe

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole obrigado pela ajuda,

estou tentando adaptar o código enviado, mas até agora ele só abriu o PDF, depois de abrir ele dá um erro "não é possível executar a macro 'pasta1!FirstStep.Talvez ela não esteja disponível nesta pasta de trabalho ou todas as macros estejam desabilitadas."

 

Eu precisava copiar 2 campos específicos do PDF e depois procurar esses valores em uma coluna no excel, conseguiria me ajudar nisso ?

 

Mais uma vez obrigado pelo rápido retorno!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um modulo e cole o código neste modulo. Pelo seu relato, você colou o código no vbe de uma planilha (aba).

 

O código exemplo, vai colar os dados na 1ª aba; Neste método copiar e colar, não tem como especificar o que colar, ou seja vai copiar e colar todo o documento.

 

Depois que tiver todos os dados obtidos do pdf,ai faz uma procura dos campos citados, copia no local desejado, em seguida deleta os dados colados.   

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui rodar o código, copiou todo o conteúdo do PDF e deu erro na linha;

"AppActivate "Microsoft Excel"
ThisWorkbook.Activate
Sheets(1).Activate
Range("A1").Activate
SendKeys ("^v")
End Sub

 

A escrita está correta, ou se utiliza outro argumento para abrir excel 2016 ? O erro que dá é de procedimento inválido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo removendo o erro persiste, veja o anexo.

Não sei se por meu excel estar em português possa estar influenciando em algo...

Para rodar esse código, há alguma referência específica que deve estar ativado ?

Muito obrigado pelas respostas.

 

 

vba.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

É incompatibilidade de versão do Office. 

 

Verifique a versão e se 32 ou 64 bits, do office.

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente alterar:

 

A linha:            AppActivate "Microsoft Excel"

 

Por esta:         AppActivate "Excel" 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depurando o código reparei que a linha "SendKeys ("%fx")" abre o menu de ferramentas na janela do VBA.

adicionado 2 minutos depois

substituindo  as linhas informadas o códigou rodou mas não colou as informações no excel e sim dentro da janela do código...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que esteja executando pelo depurador.  

Experimente executar na planilha ativa. Aperte as teclas Alt+ F, selecione "StartAdobe" e botão [ executar ].

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui rodar o código sem erros, era isso mesmo, tinha que salvá-lo e executá-lo pela planilha aberta.

Como faço para ao invés dele selecionar apenas a primeira página do PDF, ele selecionar todo o conteúdo do arquivo pdf ?

 

Por exemplo, o PDF que estou rodando o código possui 51 páginas. A ideia geral seria primeiro trazer todo o conteúdo desse pdf para o excel, e procurar alguns campos específicos para verificar se existem em uma coluna de um outro arquivo em excel... Se existir = ok, se não existir = marcar o valor na coluna procurada.

 

Obrigado pelo retorno!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código copia todo o conteúdo do documento, ou seja todas as paginas. 

 

O que pode estar acontecendo ai pra voce, é que o adobe demora alguns segundos para abrir o documento, dependendo do tamanho em mb, ou em pela quantidade de páginas, e também para copiar todas as paginas. 

 

Neste caso experimente alterar, aumentando o tempo em: 

 

Application.OnTime Now + TimeValue("00:00:15"), "FirstStep"

Application.OnTime Now + TimeValue("00:00:15"), "SecondStep"

 

Para procurar, aperte as teclas [ ctrl+ l ]

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi o motivo de não puxar tudo, o PDF vem com o 'View > Page Display > Single Page View' ativado, por isso só seleciona uma página no ctrl + a... O ideal era esse PDF ser com a opção Enable Scrolling ativado.

 

Supondo que todo o conteúdo esteja no excel, como seria esse código para comparar um valor específico do arquivo extraido no excel com uma outra base também em excel ? 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não estiver conseguindo puxar todo o conteúdo do pdf, uma outra opção, é extrair os dados para um arquivo texto, em seguida importar para o excel. 

 

O código para comparar seria mais ou menos assim: 

 

 Dim rng As Range
    Dim msg As String
    Dim ed_1 As String
    
    With ActiveSheet
        
        Set rng = Cells.Find(InputBox("Digite o que deseja comparar", "Localizar", "Teste"))
        If Not rng Is Nothing Then
            ed_1 = rng.Address
            Do
                msg = msg & " Encontrado em: " & rng.Address & vbCr
                
                Set rng = Cells.FindNext(rng)
                If rng Is Nothing Then Exit Sub
                Loop While rng.Address <> ed_1
            End If
            
        End With
        
        If msg <> "" Then MsgBox msg, 64, "Itens Encontrados"

  

Compartilhar este post


Link para o post
Compartilhar em outros sites

"Se não estiver conseguindo puxar todo o conteúdo do pdf, uma outra opção, é extrair os dados para um arquivo texto, em seguida importar para o excel." 

 

É possível fazer isso com o VBA ? 

 

A lógica seria da seguinte forma: 

 

Captar 2 valores do PDF(campo A e Campo B) e faça 2 verificações.

Verificar se o "Campo A" existe na coluna "ValoresA" no arquivo "XXXX" em excel.
    Se existir verificar na coluna "ValoresB" se o valor do "CampoB" do arquivo 
"XXXX" bate
    Se bater ok.   
       senao bater marcar de alguma forma que não foi encontrado.
fim.

Compartilhar este post


Link para o post
Compartilhar em outros sites
33 minutos atrás, ErickSant disse:

É possível fazer isso com o VBA ? 

 

Sim, mas utilizo um utilitário ajudar nesta tarefa.

Qual a versão do seu windows? e se é 32 ou 64 bits?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o exemplo que converte o pdf para texto em seguida importa para o excel.

Extraia os arquivos e coloque o seu pdf na mesma pasta que contem esses arquivos.

 

Convert_PDF.zip

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole  o conversor até funcionou, porém o pdf vem com alguns campos juntos, veja o anexo.

 

A ideia é captar 2 valores do PDF(Payment Amount(valor(Célula A20)) e Payment no(valor)Célula A15)) e faça 2 verificações.

Verificar se o "Payment no" existe na coluna "B" no arquivo "xxxxxxxxx" 
    Se existir verificar na coluna "A" se o valor do "Payment Amount" do arquivo 
"xxxxxxxxx" bate
    Se bater ok.   
       senao bater marcar de alguma forma que não foi encontrado.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 minutos atrás, ErickSant disse:

 o conversor até funcionou, porém o pdf vem com alguns campos juntos, veja o anexo.

 

Não estou vendo nenhum anexo ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×