Limite file xlsx



  • Limite file xlsx
    di Albertino (utente non iscritto) data: 29/09/2010

    Salve a tutti,

    il mio problema è il seguente. ho un file .csv di 900mega quando lo apro naturalmente non me lo fa vedere tutto ma solo fino alla riga 1.048.576 che è il limite di righe di xlsx.

    aprendolo il file con textpad ho visto che contiene 7.116.234 righe.

    mi chiedevo:
    •c'è un modo per importarmi il file su foglio xlsx e magari quando arrivo al limite di 1.048.576 righe mi prosegue l'import sul foglio2 e cosi via.....!! ??
    •posso importare il file eseguendo un filtro prima ancora che importa i dati su file xlsx???

    al di là di questo visto che devo fare una macro e non posso utilizzare access (tra l'altro sono ignorantissimo a proposito) c'è un'altro modo secondo voi per risolvere il problema?????

    grazie a tutti per l'aiuto.



  • di Ricky53 (utente non iscritto) data: 29/09/2010

    Ciao albertino,
    caspita che file grande !!!
    ti serve tutto il file con tutti di dati per riga e tutte le righe?

    il filtro in base a quali condizioni, serve una “chiave” univoca per copiare/scartare i dati?

    una macro che legge il file csv scorre le righe ed arrivata ad un valore limite va sul foglio successivo, ecc fino alla fine si può fare. tu che conoscenze hai di vba ???

    ciao da ricky53



  • di Miglio (utente non iscritto) data: 29/09/2010

    Salute a tutti
    un file di quelle dimensioni alla fine penso sia difficile da analizzare anche spalmandolo su più fogli excel.
    io (se hai tutto il pacchetto office) importerei in access e poi con delle query filtrerei i dati, o volendo con le librerie ado o dao potresti importare su excel solo quello che ti interessa per poi lavorarci su.
    come diceva riky, dipende dalle tue conoscenze di vba.



    mandi



  • di Albertino (utente non iscritto) data: 30/09/2010

    Le mie conoscenze di vba sono poche....!! per quanto riguarda access non l'ho mai utilizzato non saprei da dove cominciare. l'deale sarebbe importare i dati su foglio excel filtrando durante l'import in base ad un valore(es:nome applicazione) oppure una condizione(es:tutti i valori maggiori del 30/09/2010)ed eventualmente se si arrivasse alla fine del foglio1 passare sul foglio2 e cosi via....!! fatto questo dovrei fare dei confronti con dei dati contenuti in ulteriori fogli ma sono in questo caso composti da poche righe (900 non di più) e alla fine generare l'output su un ulteriore foglio di report. questa ultima parte non mi preoccupa, ma la prima parte quella fondamentale credo non sia facile...al momento non saprei come fare.



  • di Ricky53 (utente non iscritto) data: 30/09/2010

    Ciao,
    devi mandare la struttura dei tuoi dati; i dati devono avere tutti la stessa struttura (tutte le righe) altrimenti si muore ...

    puoi allegare un ridotto ma che sia significativo per le casistiche.

    ciao da ricky53




  • di Ricky53 (utente non iscritto) data: 04/10/2010

    Ciao,
    in attesa di tue notizie in merito alla struttura dei dati, ti invio una macro che:
    1. carica i dati da un file "txt”,
    2. arrivata alla fine delle righe di un foglio, passa al foglio successivo,
    3. se i fogli non sono sufficienti, ne aggiunge altri,
    4. il tutto fino alla fine del file "txt”.

    non è la soluzione ideale ma in assenza di altre informazioni ... è meglio di nulla

    ciao da ricky53

     
    Dim I As Long, X As Integer
    
    Sub Scrivi_su_più_Fogli()
        File_Inp = "c:PROVA.TXT"
        Open File_Inp For Input As #1
        
        I = 0
        X = 1
        Sheets(X).Select
        Cells.ClearContents
        Do Until EOF(1)
            I = I + 1
            Line Input #1, Dati
    '        ActiveSheet.Cells(I, 1) = "---" & Dati & "+++"
            ActiveSheet.Cells(I, 1) = Dati
            If I >= 65535 Then ‘ QUI metti il valore che ti necessita, io ho utilizzato il valore di excel 2003 meno “1”
                X = X + 1
                Sheets(X).Select
                On Error GoTo Inserisci_foglio
                Cells.ClearContents
                I = 0
            End If
        Loop
        
        Close
        MsgBox "Eleborazione Terminata"
        Exit Sub
    
    Inserisci_foglio:
        Sheets.Add
        Sheets(X - 1).Select
        Sheets(X - 1).Move After:=Sheets(X)
        Resume Next
    End Sub
    
    



  • di Albertino (utente non iscritto) data: 04/10/2010

    Grazie ricky,

    non l'ho testata ma ti farò sapere. la struttura dei miei dati è abbastanza normale cioè ho 5 colonne: nome,cognome,età,indirizzo,città. tutti i dati sono diversi. le righe possono essere tantissime come ti ripeto e quindi la necessita di slittare su un altro foglio mi sembra necessaria. potrei pre-filtare per ridurre il tempo di tutto in base al valore di città però a questo punto dovrei impostare un filtro su città congiunto alla sub che tu mi hai inviato per splittare su altro foglio nel caso di aver riempito tutte le righe.

    comunque grazie riky.



  • di Ricky53 (utente non iscritto) data: 05/10/2010

    Ciao,
    si può fare direttamente con la macro basta sapere cosa prendere.

    tu puoi utilizzare due o più celle di appoggio in cui scrivi cosa importare.
    ipotizziamo di voler importare tutte le righe con nome=mario e cognome=rossi
    in "aa1" scriviamo "mario"
    in "ab1" scriviamo "rossi"
    in "ac1" scriviamo "roma"
    ...
    poi con delle nuove istruzioni (che ti posso scirvere) si eleabora e si prendeono tutte le righe che soddisfano "tutte" le condizioni.

    devi solo dire quali sono i campi sui cui intervenire.

    ciao da ricky53



  • di Albertino (utente non iscritto) data: 06/10/2010

    Grazie ricky.

    ma anzichè splittare su un altro foglio nello stesso file posso splittare sul foglio1 di un nuovo file excel???

    grazie



  • di Ricky53 (utente non iscritto) data: 06/10/2010

    Ciao,
    si si può fare ma si complica un po' la cosa.
    ne vale la pena ???

    non ti basta selezionare per i dati che ti ho indicato e scrivere su più fogli dello stesso file "xls" ???

    ciao da ricky53



  • di Ricky53 (utente non iscritto) data: 06/10/2010

    Ciao,
    avevo un po' di tempo ed ho scritto questa macro.

    provala e ...

    ciao a ricky53
     
    Dim I As Long, X As Integer
    
    Sub Scrivi_su_più_File()
        File_Iniziale = ActiveWorkbook.Name
        File_Inp = "c:appunti1.txt"
        Open File_Inp For Input As #1
        
        I = 0
        X = 1
        Workbooks.Add
        Application.ScreenUpdating = False
        Do Until EOF(1)
            I = I + 1
            Line Input #1, Dati
            ActiveSheet.Cells(I, 1) = Dati
            If I >= 5 Then
                ActiveWorkbook.SaveAs Filename:= _
                    "File_Salvato_" & Format(X, "000") & ".xls", FileFormat:=xlNormal, _
                    Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
                    CreateBackup:=False
                X = X + 1
                ActiveWorkbook.Close
                Workbooks.Add
                [A1].Select
                I = 0
            End If
        Loop
        ActiveWorkbook.SaveAs Filename:= _
            "File_Salvato_" & Format(X, "000") & ".xls", FileFormat:=xlNormal, _
            Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
            CreateBackup:=False
        ActiveWorkbook.Close
        Application.ScreenUpdating = True
        Close
        MsgBox "Eleborazione Terminata, sono stati salvati  '" & X & "'  File"
    End Sub
    
    



  • di Albertino (utente non iscritto) data: 11/10/2010

    Grazie ricky...per il tuo prezioso aiuto. l'ho provata e sembra tutto ok. ti farò sapere eventuali problemi futuri eventualmente.

    grazie