Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por nandoagac
#70556
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.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Basole
Posts Avatar
#70581
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

.
Por nandoagac
#70628
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.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Basole
Posts Avatar
#70657
.... 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
Você não está autorizado a ver ou baixar esse anexo.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord