Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Importar TXT sem delimitador

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
narsi
Colaborador
Colaborador
Mensagens: 31
Registrado em: Qui Out 13, 2011 3:56 pm
Localização: Ipatinga / MG

Importar TXT sem delimitador

Mensagem por narsi »

Boa noite!

Eu tenho que importar mensalmente um arquivo txt semelhante a esse em anexo e gostaria de automatizar esta importação para facilitar meu trabalho.

Seguindo alguns exemplos que encontrei aqui, consegui fazer tal importação, porém não do jeito que preciso, pois eu gostaria de importar somente registros válidos (que começam com data na primeira coluna) e posicioná-los em colunas separadas do excel.

Caso possam me ajudar, ficarei grato.
Anexos
Arquivo.rar
(1.5 KiB) Baixado 306 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
excelflex
Colaborador
Colaborador
Mensagens: 20
Registrado em: Sex Set 14, 2018 7:03 pm

Re: Importar TXT sem delimitador

Mensagem por excelflex »

Você pode fazer isso de várias formas, vou enumerar duas e você escolhe qual é a mais simples pra você.

1. Importar o arquivo diretamente com delimitadores no Excel em uma sheet temporária (gravando uma macro você consegue pegar o código certinho) e depois faz uma verificação para identificar o que for data e vai excluindo as linhas inválidas.

2. Abrir o arquivo com "Open For Input" e ler as linhas uma a uma, verificando se é data e já ir salvando na sheet definitiva do Excel.

Espero ter ajudado.

Abçs.

Marcus.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Importar TXT sem delimitador

Mensagem por Reinaldo »

Narsi, fica difícil identificar em um texto sem delimitadores qual o tamanho/conteúdo de cada campo/coluna; poste seu modelo excel identifique o que consegue importar, e em uma outra sheet detalhe como deveria ser; pois assim devera ser possível identificar o layout que voce espera/deseja


narsi
Colaborador
Colaborador
Mensagens: 31
Registrado em: Qui Out 13, 2011 3:56 pm
Localização: Ipatinga / MG

Re: Importar TXT sem delimitador

Mensagem por narsi »

Boa noite!

Marcus, eu já tinha feito como você sugeriu na opção 1, estava usando assim e funcionava bem, porém meu arquivo esta ficando muito grande (já são 8 meses) e minha intenção era melhorar o código para conseguir importar somente o mês em curso. Por isso eu pedi ajuda, já que não consegui ler e gravar somente as linhas que contém informações que eu preciso (que iniciam a linha com data).

Reinaldo, os campos tem sempre o mesmo tamanho. Isso é um facilitador, mas meu problema é não conseguir mesmo ler linha a linha e identificar se ela começa com data.

De qualquer forma, segue uma arquivo de exemplo de como eu estava fazendo.

Desde já obrigado.
Anexos
Arquivo Teste.rar
(27.93 KiB) Baixado 284 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
excelflex
Colaborador
Colaborador
Mensagens: 20
Registrado em: Sex Set 14, 2018 7:03 pm

Re: Importar TXT sem delimitador

Mensagem por excelflex »

Se puder, entra em contato comigo pelo e-mail marcus@excelflex.com.br ou pelo WhatsApp 21 99322-7969 para eu ver o que pode ser feito, aqui pelo fórum fica muito lenta a comunicação, depois que chegarmos a um resultado colocamos aqui a solução, ok?


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Importar TXT sem delimitador

Mensagem por Reinaldo »

uma possibilidade, veja se atende:
Arquivo Teste.zip
(29.26 KiB) Baixado 305 vezes

Código: Selecionar todos

Sub Ler_Txt_FSO()
'E Necessario registrar a biblioteca "Microsoft Script RunTime"
Dim FSO As FileSystemObject
Dim TS As TextStream
Dim Texto As String
Dim NomeArquivo As String
Dim L As Integer
NomeArquivo = ThisWorkbook.Path & "\" & "Arquivo.txt"
L = 2
Set FSO = New FileSystemObject
Set TS = FSO.OpenTextFile(NomeArquivo, ForReading)

Sheets("Teste").Range("A2:J8000").ClearContents

Do Until TS.AtEndOfStream
Texto = TS.ReadLine
    If VBA.IsDate(VBA.Left(Texto, 10)) Then
    Texto = WorksheetFunction.Clean(LTrim(Texto))
        Cells(L, 1).Value = CDate(VBA.Trim(VBA.Left(Texto, 11)))
        Cells(L, 2).Value = VBA.Trim(Mid(Texto, 12, 11))
        Cells(L, 3).Value = VBA.Trim(Mid(Texto, 23, 11))
        Cells(L, 4).Value = VBA.Trim(Mid(Texto, 34, 6))
        Cells(L, 5).Value = VBA.Trim(Mid(Texto, 40, 7))
        Cells(L, 6).Value = VBA.Trim(Mid(Texto, 47, 7))
        Cells(L, 7).Value = VBA.Trim(Mid(Texto, 54, 9))
        Cells(L, 8).Value = VBA.Trim(Mid(Texto, 63, 11))
        If IsDate(VBA.Replace(Mid(Texto, 74, 12), Chr(32), "")) Then Cells(L, 9).Value = CDate(VBA.Replace(Mid(Texto, 74, 12), Chr(32), ""))
        Cells(L, 10).Value = Mid(Texto, 86, 15)
    L = L + 1
    End If
Loop
TS.Close
    contRegistros = L - 1
    MsgBox ("Importação concluída! Foram importados " & contRegistros & " Registros."), vbInformation

End Sub
Editado pela última vez por Reinaldo em Qua Jun 05, 2019 10:48 am, em um total de 1 vez.


mordomo
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Sex Nov 30, 2018 10:33 am

Re: Importar TXT sem delimitador

Mensagem por mordomo »

Bom dia Narsi e demais!

Em qual pasta o arquivo "Arquivo.txt" deve ficar, para o excel localizá-lo e fazer a importação? Tentei fazer o teste aqui, mas aparece a mensagem dizendo que o arquivo não foi localizado.

Abraços!


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Importar TXT sem delimitador

Mensagem por Reinaldo »

A linha -->NomeArquivo = ThisWorkbook.Path & "\" & "Arquivo.txt"<-- determina o nome e local onde o arquivo txt está "hospedado"
Nesse exemplo -->ThisWorkbook.Path<-- determina ser o mesmo diretorio onde está a planilha excel


narsi
Colaborador
Colaborador
Mensagens: 31
Registrado em: Qui Out 13, 2011 3:56 pm
Localização: Ipatinga / MG

Re: Importar TXT sem delimitador

Mensagem por narsi »

Reinaldo, primeiramente peço desculpas pela demora em responder sobre sua ajuda, mas tive um problema de saúde na família que me ocupou por um longo período e tive que "abandonar" este projeto. Agora consegui retomar e testei a sua sugestão, que funcionou perfeitamente neste arquivo de teste.

Ocorre que, quando implementei a mesma funcionalidade no arquivo completo, não sei porque motivo, fica rodando o tempo todo e nunca completa a importação, me levando a forçar o fechamento da planilha pelo Gerenciador de Tarefas.

Esta planilha é uma ferramenta que desenvolvi para um Consórcio de Saúde de minha região, onde eu importo os empenhos e pagamentos realizados e gero um Balancete mensal para cada cidade consorciada, de acordo com uma tabela com percentuais cadastrados previamente. Mas como eu disse, funcionou na planilha de teste, mas na planilha completa fica processando e não conclui.

Já tentei de tudo para fazer funcionar, mas estou com dificuldade em conseguir, haja vista que sou somente um curioso neste assunto e fiz esta planilha com uma mistura de fórmulas diretas no excel e algumas coisas em vba.

Caso tenha disponibilidade em me ajudar com isso, posso mandar a planilha oficial no seu email.

Desde já agradeço.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Importar TXT sem delimitador

Mensagem por Reinaldo »

Boa tarde; sem garantia de prazo e resultado :oops: , posso tentar ajudar a entender/resolver o que ocorre :mrgreen: . Se puder ser assim; coloque seu arquivo em um compartilhador de arquivos tipo Google Drive / Dropbox /etc.. e mande o link via mensagem privada aqui o fórum mesmo


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder