Página 1 de 1

Importar dados de PDF para excel

Enviado: 02 Mai 2022 às 10:30
por nandoagac
Bom dia!

Gostaria de uma ajuda para criar uma macro para importar dados de pdf para excel.
Condições:
a macro deve abrir uma caixa de pesquisa para localizar a o pdf ou mais de um arquivo pdf se possível.
O arquivo pode ter várias páginas, e para cada página, os campos nº da nota, data do pregão, folha, cnpj, deve ser criado uma coluna independente associada aos dados da tabela em vermelho de cada página conforme imagem no anexo.

Após importar os dados, se for possível, fazer a verificação se os mesmos dados já não foram importados.
Desde já agradeço muito a ajuda.

Re: Importar dados de PDF para excel

Enviado: 03 Mai 2022 às 17:26
por Basole
Voce pode utilizar o utilitário PdftoText em conjunto com a rotina abaixo, para extrair os dados para *.txt, e importando para o Excel, desta forma fica mais fácil para automatzar esta tarefa.

Exemplo:
Código: Selecionar todos
Sub ExtractPDFtoText()
    Dim source      As String
    Dim dest        As String
    Dim respost
    Dim exe         As String
    Dim wsh         As Object
    Set wsh = VBA.CreateObject("WScript.Shell")
    respost = Application.GetOpenFilename(Title:="Escolha o arquivo para importar", FileFilter:="PDF Files *.pdf (*.pdf),")
    If respost = False Then
        MsgBox "Arquivo especificado!", 48, "Atenção"
        Exit Sub
    End If
    source = respost
    exe = "pdftotext.exe"
    dest = vba.Replace(source, ".pdf", ".txt")
           wsh.Run exe & " " & """" & source & """" & " -layout", VBA.vbHide, True
    Workbooks.OpenText Filename:=dest, _
            StartRow:=1, _
            DataType:=xlFixedWidth, _
            TrailingMinusNumbers:=True
End Sub
* Baixe o executavel pdftotext.exe e sale na pasta system32 do seu windows

https://www.xpdfreader.com/download.html

.

Re: Importar dados de PDF para excel

Enviado: 06 Mai 2022 às 09:12
por nandoagac
Bom dia Basole, muito obrigado pela ajuda. Mas infelizmente deu erro, meio que to apanhando pra isso, sou bom com fórmulas mas macro muito pouco. Esse xpdf reader converte o arquivo para txt? Estou perguntando, pois pretendo distribuir essa planilha para varias pessoas que tem adobe pdf, ele não bastaria? Se tivesse como nem necessitar de programa a mais seria ótimo, mas se não tiver como tranquilo tbem.
Vc chegou ver a planilha e a imagem que fiz upload do modelo de como devem ficar os dados.
Atribuí a macro que vc fez a um botão e ao executar deu o erro em anexo.
Desde já agradeço muito pela atenção e ajuda.

Re: Importar dados de PDF para excel

Enviado: 10 Mai 2022 às 11:16
por Basole
.... Esse xpdf reader converte o arquivo para txt? Estou perguntando, pois pretendo distribuir essa planilha para varias pessoas que tem adobe pdf, ele não bastaria? Se tivesse como nem necessitar de programa a mais seria ótimo, mas se não tiver como tranquilo tbem.
@nandoagac
O motivo para usar o conversor para txt é que ele mantem fiel a formatação (veja o anexo).
Desta forma, com um padrão de formatação, vai importar corretamente.
Há outras forma de copiar e colar os dados do pdf na planilha, mas desta forma perde a formatação original.


Vc chegou ver a planilha e a imagem que fiz upload do modelo de como devem ficar os dados.
Atribuí a macro que vc fez a um botão e ao executar deu o erro em anexo.
Sim.
Tente rodar com as alterações que fiz.


Código: Selecionar todos
Sub ExtractPDFtoText()
    Dim source      As String
    Dim respost
    Dim exe         As String
    
    respost = Application.GetOpenFilename(Title:="Escolha o arquivo para importar", FileFilter:="PDF Files *.pdf (*.pdf),")
    If respost = False Then
        MsgBox "Arquivo especificado!", 48, "Atenção"
        Exit Sub
    End If
    source = respost
    source = GetShortPath(source)
    exe = "pdftotext.exe"
    
    VBA.Shell exe & " " & Chr(34) & source & Chr(34) & " -layout", vbMinimizedFocus
                 
    ' * o arquivo txt será salvo na mesma pasta do arquivo pdf selecionado
  
End Sub

Public Function GetShortPath(path As String) As String
' função que encurta o caminho(path), abaixo limite 256 caract.
  Dim fso As Object
  If fso Is Nothing Then
  Set fso = VBA.CreateObject("Scripting.FileSystemObject")
  End If
 
  If fso.FileExists(path) Then
      GetShortPath = fso.GetFile(path).ShortPath
      Exit Function
  End If
 
  If fso.FolderExists(path) Then
      GetShortPath = fso.GetFolder(path).ShortPath
      Exit Function
  End If

End Function