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 todosSub 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 todosSub 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