Condividi tramite

Importazione più files .csv

Anonimo
2012-07-17T14:32:26+00:00

Mi rifaccio al post del 4-7 maggio (http://answers.microsoft.com/it-it/office/forum/office_2007-excel/importare-più-csv-in-unico-file-xls/a4ed51aa-d94b-41c8-9dda-c82c3989a98c). L'istruzione VB fornita da Mauro Gamberini soddisferebbe le mie richieste se i files .csv si trovassero tutte in una cartella e non si creassero più fogli di lavoro. Ora, mi trovo con la presenza di più sottocartelle in ognuna delle quali ci sono più files .csv. I files .csv che mi interessa importare hanno tutti lo stesso nome (Sicon_Welds) e struttura e vorrei importarli uno sotto l'altro, in un unico foglio di lavoro. Come fare?

Saluti.

Francesco

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-07-18T09:29:55+00:00

Mauro, ti ringrazio per l'interessamento e veniamo al dunque. Le subdirectory, sono tutte posizionate sotto la directory "Inferiori" sul Desktop. All'interno di ognuna di queste subdirectory c'è un file chiamato "Sicon_Welds.csv" oggetto dell'import. Ho notato che tale file(s) nonostante sia in formato csv, è stato già importato e suddiviso dall'originale (anche se ho visto che con le tue istruzioni viene importao correttamente). Quindi, la necessità di raggruppare tutti i files "Sicon_Welds.csv" uno sotto l'altro in un unico foglio. Spero di essere stato esaustivo.

 

P.S. Mauro, vado un pò OT. Hai avuto poi tempo per verificare la mia richiesta precedente del 16 maggio?

Per il file di maggio, in mezzo c'è stato il terremoto. Puoi postare il link?

Grazie.

Per il quesito di questo post, prova questa (vedi note in fondo):

Public Sub m()

    Dim objFSO As Object

    Dim objFolder As Object

    Dim objFile As Object

    Dim objSubfolder As Object

    Dim colSubfolders As Object

    Dim qryTab As QueryTable

    Dim sh As Worksheet

    Dim lRiga As Long

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set objFolder = objFSO.GetFolder("C:\Prova")

    Set colSubfolders = objFolder.Subfolders

    Set sh = ThisWorkbook.Worksheets("Foglio1")

    With sh

        For Each objSubfolder In colSubfolders

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row + 1

            If Dir(objSubfolder.Path & "\Sicon_Welds.csv") <> "" Then

            With .QueryTables.Add(Connection:="TEXT;" & _

                objSubfolder.Path & "\Sicon_Welds.csv", _

                Destination:=.Range("A" & lRiga))

                .Name = "XXXX"

                .FieldNames = True

                .RowNumbers = False

                .FillAdjacentFormulas = False

                .PreserveFormatting = True

                .RefreshOnFileOpen = False

                .RefreshStyle = xlInsertDeleteCells

                .SavePassword = False

                .SaveData = True

                .AdjustColumnWidth = True

                .RefreshPeriod = 0

                .TextFilePromptOnRefresh = False

                .TextFilePlatform = 1250

                .TextFileStartRow = 1

                .TextFileParseType = xlDelimited

                .TextFileTextQualifier = xlTextQualifierDoubleQuote

                .TextFileConsecutiveDelimiter = False

                .TextFileTabDelimiter = False

                .TextFileSemicolonDelimiter = True  '<<===Delimitatore

                .TextFileCommaDelimiter = True  '<<===Delimitatore

                .TextFileSpaceDelimiter = False

                .TextFileColumnDataTypes = Array(1, 1, 1, 1) '<<=== Numero colonne da modificare

                .TextFileTrailingMinusNumbers = True

                .Refresh BackgroundQuery:=True

            End With

            For Each qryTab In .QueryTables

                qryTab.Delete

            Next

            End If

        Next

    End With

    Set sh = Nothing

    Set objSubfolder = Nothing

    Set colSubfolders = Nothing

    Set objFile = Nothing

    Set objFolder = Nothing

    Set objFSO = Nothing

End Sub

Oppure (fa la stessa cosa in altro modo):

Public Sub m()

    Dim objFSO As Object

    Dim objFolder As Object

    Dim objFile As Object

    Dim objSubfolder As Object

    Dim colSubfolders As Object

    Dim wk As Workbook

    Dim qryTab As QueryTable

    Dim sh As Worksheet

    Dim lRiga As Long

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set objFolder = objFSO.GetFolder("C:\Prova")

    Set colSubfolders = objFolder.Subfolders

    Set sh = ThisWorkbook.Worksheets("Foglio1")

    Application.ScreenUpdating = False

    With sh

        For Each objSubfolder In colSubfolders

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row + 1

            If Dir(objSubfolder.Path & "\Sicon_Welds.csv") <> "" Then

                Set wk = Workbooks.Open(objSubfolder.Path & "\Sicon_Welds.csv")

                wk.Worksheets(1).UsedRange.Copy

                .Range("A" & lRiga).PasteSpecial

                Application.DisplayAlerts = False

                wk.Close

                Application.DisplayAlerts = True

            End If

        Next

    End With

    Application.ScreenUpdating = True

    Set wk = Nothing

    Set sh = Nothing

    Set objSubfolder = Nothing

    Set colSubfolders = Nothing

    Set objFile = Nothing

    Set objFolder = Nothing

    Set objFSO = Nothing

End Sub

NOTE.

Modifica questa path:

"C:\Prova"

con la path della cartella dove si trovano le cartelle con i files, quindi con la path di Inferiori.

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-07-18T14:48:46+00:00

    Sei un grande Mauro !!!!!! Hai risolto il mio angoscioso problema. La prima macro funziona a dovere, mentre la seconda riunisce le varie colonne e le mette insieme col delimitatore ";" in colonna A.

    Ho tanto da imparare da gente come te!! Grazie.

    Per quanto riguarda l'altro quesito di maggio ecco il link: http://sdrv.ms/Q5JFrk

    Grazie ancora Mauro per la tua disponibilità. Sto cercando di fare i primi passi col VBA, ho acquistato libri, ma la strada è lunga ed in salita. Se tu avessi dei consigli da darmi per meglio apprendere te ne sarei davvero grato.

    Un abbraccio.

    Francesco

    Bene, felice che tu abbia risolto.

    Appena ho tempo do un'occhiatina all'altro file.

    Per i libri:

    Biabbia (in inglese): http://www.amazon.it/Excel-Power-Programming-Spreadsheets-Bookshelf/dp/0470475358/ref=sr_1_14?s=english-books&ie=UTF8&qid=1342622423&sr=1-14

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-07-18T14:17:59+00:00

    Sei un grande Mauro !!!!!! Hai risolto il mio angoscioso problema. La prima macro funziona a dovere, mentre la seconda riunisce le varie colonne e le mette insieme col delimitatore ";" in colonna A.

    Ho tanto da imparare da gente come te!! Grazie.

    Per quanto riguarda l'altro quesito di maggio ecco il link: http://sdrv.ms/Q5JFrk

    Grazie ancora Mauro per la tua disponibilità. Sto cercando di fare i primi passi col VBA, ho acquistato libri, ma la strada è lunga ed in salita. Se tu avessi dei consigli da darmi per meglio apprendere te ne sarei davvero grato.

    Un abbraccio.

    Francesco

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-07-17T16:13:11+00:00

    Mauro, ti ringrazio per l'interessamento e veniamo al dunque. Le subdirectory, sono tutte posizionate sotto la directory "Inferiori" sul Desktop. All'interno di ognuna di queste subdirectory c'è un file chiamato "Sicon_Welds.csv" oggetto dell'import. Ho notato che tale file(s) nonostante sia in formato csv, è stato già importato e suddiviso dall'originale (anche se ho visto che con le tue istruzioni viene importao correttamente). Quindi, la necessità di raggruppare tutti i files "Sicon_Welds.csv" uno sotto l'altro in un unico foglio. Spero di essere stato esaustivo.

    P.S. Mauro, vado un pò OT. Hai avuto poi tempo per verificare la mia richiesta precedente del 16 maggio?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-07-17T15:18:12+00:00

    Mi rifaccio al post del 4-7 maggio (http://answers.microsoft.com/it-it/office/forum/office_2007-excel/importare-più-csv-in-unico-file-xls/a4ed51aa-d94b-41c8-9dda-c82c3989a98c). L'istruzione VB fornita da Mauro Gamberini soddisferebbe le mie richieste se i files .csv si trovassero tutte in una cartella e non si creassero più fogli di lavoro. Ora, mi trovo con la presenza di più sottocartelle in ognuna delle quali ci sono più files .csv. I files .csv che mi interessa importare hanno tutti lo stesso nome (Sicon_Welds) e struttura e vorrei importarli uno sotto l'altro, in un unico foglio di lavoro. Come fare?

    Saluti.

    Francesco

    Vediamo di capire bene.

    I file .csv sono in più cartelle(intese come directory), giusto? Ci sarà una discriminante per capire dove e quali sono queste cartelle o dobbiamo passare ore ;-) a scansionare *tutto* il sistema?

    Per importarli uno sotto l'altro, nessun problema. Ma dammi qualche indicazione in più sulle cartelle che li contengono, grazie.

    La risposta è stata utile?

    0 commenti Nessun commento