none
importar dados de um txt de 3,5gb para um acess ou excel RRS feed

  • Pergunta

  •  Galera como estao ....???

    Tenho um pequeno contra tempo

    Possuo um arquivo TXT com 8.460.252 registros onde seu tamanho é de 3,3gb.

    Preciso importar este dados para um excel ou mesmo para um acess,encontrei uma soluçao abaixo ,que aparentemente esta respondendo,mas estou rodando no excel que infelizmente nao esta gravando todos os dados .

    neste caso queria tentar usa-lo no acess,porem o codigo esta dando alguns errinhos...

    Algeum tem uma saida ou mesmo outra soluçao????

    abaixo codigo

    'Procedimento para selecionar arquivos
    Function lfSelecionarArquivo() As String
        Dim fDlg As FileDialog
        Dim lArquivo As String
        'Chama o objeto passando os parâmetros
        Set fDlg = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
        With fDlg
            'Alterar esta propriedade para True permitirá a seleção de vários arquivos
            .AllowMultiSelect = False
            'Determina a forma de visualização dos aruqivos
            .InitialView = msoFileDialogViewDetails
            'Filtro de arquivos, pode ser colocado mais do que um filtro separando com ; por exemplo: "*.xls;*.xlsm"
            .Filters.Add "Texto", "*.txt", 1
            'Determina qual o drive inicial
            .InitialFileName = "endereco do arquivo\"
        End With
        'Retorna o arquivo selecionado
        If fDlg.Show = -1 Then
            lArquivo = fDlg.SelectedItems(1)
            
            lfSelecionarArquivo = lArquivo
        Else
            MsgBox "Não foi selecionado nenhum arquivo"
        End If
    End Function
    Public Sub LerArquivoTexto()
        On Error GoTo TratarErro
        Dim lsCaminho As String
        Dim llArquivo As Long
        Dim llLinha As String
        Dim lQtde As Long
        Dim llPlanilhas As Long
        'Local do Arquivo
        lsCaminho = lfSelecionarArquivo 'InputBox("Digite o caminho do arquivo: ", actName)
        
        'Qtde de Linhas a separar no arquivo
        lQtde = InputBox("A cada quantas linhas separar o arquivo: ", actName)
        'Identificar se o arquivo existe
        If Dir(lsCaminho) <> "" Then
            llArquivo = FreeFile
            
            Open lsCaminho For Input As #llArquivo
            
            lContador = 1
            llPlanilhas = 1
            
            'Ler o arquivo texto
            While Not EOF(llArquivo)
                Line Input #llArquivo, llLinha
                
                If lContador <= lQtde Then
                    Range("A" & lContador).Value = llLinha
                Else
                    llPlanilhas = llPlanilhas + 1
                    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = CStr(llPlanilhas)
                    lContador = 1
                    Range("A" & lContador).Value = llLinha
                End If
                lContador = lContador + 1
            Wend
            Close #llArquivo
        Else
            MsgBox "Arquivo não encontrado"
        End If
     
    Sair:
        Exit Sub
    TratarErro:
        MsgBox "Houve um erro na leitura do arquivo!"
        GoTo Sair
        Resume
    End Sub


    ............www.alpconsultoria.com.br........ Caso esta resposta tenha solucionado sua dúvida, favor clicar em “Marcar como Resposta” para que outros membros possam compartilhar lendo este thread..

    quarta-feira, 13 de agosto de 2014 21:30

Respostas

  • Boa noite Adérito.

    É difícil supor qual o motivo desse erro, dadas as dimensões desse arquivo. Mas para tentar te ajudar, sugiro a leitura do artigo:

    http://office.microsoft.com/pt-br/excel-help/especificacoes-e-limites-do-microsoft-excel-HP010073849.aspx

    que trata dos limites aplicáveis ao Excel 2007. Verifique se algumas delas se aplica a você. Um dos possíveis gargalos pode ser o número de caracteres numa única célula ou até mesmo o limite da memória disponível (sistemas de 32 bits trabalham com limite máximo de ~3GB). Também sugiro tb verificar se o número da linha de erro é sempre o mesmo ou não. Talvez haja algum problema em dada parte do arquivo.

    Espero que ajude.

    Abraço.


    Filipe Magno

    terça-feira, 19 de agosto de 2014 00:48

Todas as Respostas

  • Dado o volume de informação a ser importado, não acho uma boa ideia importar todos os registros ao Excel e nem ao Access.

    Já considerou em utilizar a ferramenta de PowerPivot? Ela é capaz de trabalhar com milhões de dados no Excel, em alta velocidade.

    PowerPivot é um suplemento para Excel 2010 e 2013. Baixe o suplemento e tente processar o seu arquivo.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 13 de agosto de 2014 22:43
    Moderador
  • Boa Soluçao Felipe

    Porem eu tenho uma restrinçao de versao ,atualmente estou com office 2007 e a instituiçao nao possui up para 2010

    Ou seja ...tenho que trabalhar com as ferramentas que tenho...a segurança da informaçao é muito forte neste caso.....me virar nos 30.


    ............www.alpconsultoria.com.br........ Caso esta resposta tenha solucionado sua dúvida, favor clicar em “Marcar como Resposta” para que outros membros possam compartilhar lendo este thread..

    quarta-feira, 13 de agosto de 2014 23:08
  • Bom dia,

    Pelo grande número de registro não sei seria possível armazenar todos esses dados de forma linear.

    Já pensou na possibilidade de quando atingir o limite de linhas, adicionar os dados em uma nova guia ou em outras colunas.

    Á disposição.

    Abraço.

    quinta-feira, 14 de agosto de 2014 12:56
  • Jhonatan

    Bom dia

    Este codigo ja realiza este processo.

    pois preciso de algo a qual seja rapido o retorno para consolidaçao .


    ............www.alpconsultoria.com.br........ Caso esta resposta tenha solucionado sua dúvida, favor clicar em “Marcar como Resposta” para que outros membros possam compartilhar lendo este thread..

    quinta-feira, 14 de agosto de 2014 14:00
  • Ainda na minha linha de pensamento, acredito estarmos usando a ferramenta errada para resolver esse problema. Se o TI é incapaz de sensibilizar que você precisa de uma ferramenta melhor para manusear com seu material de trabalho, é uma pena.

    Bom, não vou ficar aqui discursando, vamos ao que interessa.

    Em primeiro lugar, por que precisa jogar esses dados do TXT numa planilha? O que fará depois com esses dados?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 14 de agosto de 2014 22:43
    Moderador
  • Felipe

    Voce tem toda razao....mas manda quem pode ...e tem o outro lado da $$$$$

    Apos planilhar este arquivo ,estarei consolidando ,efetuando relatorios,graficos etc.


    ............www.alpconsultoria.com.br........ Caso esta resposta tenha solucionado sua dúvida, favor clicar em “Marcar como Resposta” para que outros membros possam compartilhar lendo este thread..

    quinta-feira, 14 de agosto de 2014 22:54
  • Certo.

    Voltemos à sua rotina. Você disse que não importa todos os dados. Por quê? O que acontece?

    Você obtém um erro de execução? "Estoura" o número de linhas do Excel? Ou a rotina cessa a execução sem jogar todos os dados na planilha, sem dar erro?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 15 de agosto de 2014 00:20
    Moderador
  • Felipe

    entao os dados sao copiados,porem quando chega aproximadamente 1.500.00 de registros da um erro para fechar os aplicativos.

    E fecha o sisteminha.


    ............www.alpconsultoria.com.br........ Caso esta resposta tenha solucionado sua dúvida, favor clicar em “Marcar como Resposta” para que outros membros possam compartilhar lendo este thread..

    sexta-feira, 15 de agosto de 2014 12:35
  • Para situações como esta eu utilizo ferramentas de ETL. Atualmente tenho utilizado muito o Pentaho que é uma solução gratuita

    http://sourceforge.net/projects/pentaho/files/Data%20Integration/5.1/

    Se forem problemas pontuais com uma característica específica acho que é melhor do que desenvolver código para isso.

    Bráulio Figueiredo

    braulio@braulioti.com.br - http://www.braulioti.com.br

    sexta-feira, 15 de agosto de 2014 16:24
  • "entao os dados sao copiados,porem quando chega aproximadamente 1.500.00 de registros da um erro para fechar os aplicativos"

    Não entendo. Pelo que vi do seu código, o erro deveria acontecer na linha 1048576 porque este é o número de linhas no Excel e seu código não trata a possibilidade de copiar os dados para outra planilha caso ela fique cheia. É esse mesmo o código que está usando?

    Além disso, o erro que você obtém é um erro de execução do VBA ou um crash da aplicação Excel?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 16 de agosto de 2014 12:11
    Moderador
  • Felipe

    AO rodar o codigo ,ele te pergunta em que linha que sera quebrado

    com isso ele quebra para uma nova planilha.

    mas quando carrega aproximadamente 1.500.000 ,sendo quebrado em varias outras planilhas,ele da um erro

    logo depois da a tela de erro do sistema

    ja rodei o mesmo codigo em um micro novo ,sem nenhum sistema rodando,para certificar algum problema de memoria ou mesmo desempenho de maquina ,porem  me apresentou a mesma mensagem.


    ............www.alpconsultoria.com.br........ Caso esta resposta tenha solucionado sua dúvida, favor clicar em “Marcar como Resposta” para que outros membros possam compartilhar lendo este thread..


    • Editado Adérito segunda-feira, 18 de agosto de 2014 13:19 erro digito
    segunda-feira, 18 de agosto de 2014 13:18
  • Boa noite Adérito.

    É difícil supor qual o motivo desse erro, dadas as dimensões desse arquivo. Mas para tentar te ajudar, sugiro a leitura do artigo:

    http://office.microsoft.com/pt-br/excel-help/especificacoes-e-limites-do-microsoft-excel-HP010073849.aspx

    que trata dos limites aplicáveis ao Excel 2007. Verifique se algumas delas se aplica a você. Um dos possíveis gargalos pode ser o número de caracteres numa única célula ou até mesmo o limite da memória disponível (sistemas de 32 bits trabalham com limite máximo de ~3GB). Também sugiro tb verificar se o número da linha de erro é sempre o mesmo ou não. Talvez haja algum problema em dada parte do arquivo.

    Espero que ajude.

    Abraço.


    Filipe Magno

    terça-feira, 19 de agosto de 2014 00:48