Discussione:
importare come tabella collegata file csv
(troppo vecchio per rispondere)
Akery
2024-11-04 18:30:28 UTC
Permalink
Buonasera,
come posso importare tramite vba dei file csv?
i file hanno come delimitatore di campo il tab e non hanno nomi di
campo, stavo arrancando qualcosa con chatgpt ma non trovo la soluzione

Sub CollegaCSVInCartella()
Dim percorsoCartella As String
Dim nomeFile As String
Dim nomeTabella As String
Dim contatore As Integer
Dim connessione As String

' Specifica il percorso della cartella contenente i file CSV
percorsoCartella = currentproject.path & "\"

' Definisce la stringa di connessione specifica
connessione =
"Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=1200;ACCDB=YES;"

' Cerca il primo file CSV nella cartella
nomeFile = Dir(percorsoCartella & "\*.csv")

' Inizializza il contatore
contatore = 1

' Ciclo per ogni file CSV trovato
Do While nomeFile <> ""
' Genera il nome della tabella in base al nome del file
nomeTabella = "CSV_" & contatore

' Crea il collegamento al file CSV specificando i parametri
DoCmd.TransferText _
TransferType:=acLinkDelim, _
TableName:=nomeTabella, _
FileName:=percorsoCartella & "\" & nomeFile, _
HasFieldNames:=False, _
SpecificationName:=connessione

' Passa al prossimo file CSV nella cartella
nomeFile = Dir()

' Incrementa il contatore per creare un nome di tabella unico
contatore = contatore + 1
Loop

MsgBox "Collegamento dei file CSV completato!", vbInformation
End Sub

Akery
RobertoA
2024-11-05 11:00:47 UTC
Permalink
Post by Akery
Buonasera,
come posso importare tramite vba dei file csv?
i file hanno come delimitatore di campo il tab e non hanno nomi di
campo, stavo arrancando qualcosa con chatgpt ma non trovo la soluzione
Sub CollegaCSVInCartella()
    Dim percorsoCartella As String
    Dim nomeFile As String
    Dim nomeTabella As String
    Dim contatore As Integer
    Dim connessione As String
    ' Specifica il percorso della cartella contenente i file CSV
    percorsoCartella = currentproject.path & "\"
    ' Definisce la stringa di connessione specifica
    connessione =
"Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=1200;ACCDB=YES;"
    ' Cerca il primo file CSV nella cartella
    nomeFile = Dir(percorsoCartella & "\*.csv")
    ' Inizializza il contatore
    contatore = 1
    ' Ciclo per ogni file CSV trovato
    Do While nomeFile <> ""
        ' Genera il nome della tabella in base al nome del file
        nomeTabella = "CSV_" & contatore
        ' Crea il collegamento al file CSV specificando i parametri
        DoCmd.TransferText _
            TransferType:=acLinkDelim, _
            TableName:=nomeTabella, _
            FileName:=percorsoCartella & "\" & nomeFile, _
            HasFieldNames:=False, _
            SpecificationName:=connessione
        ' Passa al prossimo file CSV nella cartella
        nomeFile = Dir()
        ' Incrementa il contatore per creare un nome di tabella unico
        contatore = contatore + 1
    Loop
    MsgBox "Collegamento dei file CSV completato!", vbInformation
End Sub
Akery
Con gli automatismi, si fa prima, ma bisogna essere fortunati (che il
formato sia quello previsto, che i caporiga siano cr e non la coppia
cr+lf e tutto il resto)
A mia esperienza, fai prima a leggere una riga alla volta col "Line
Input" e poi te la smazzi come vuoi, finche' sono file di testo puoi
fare pressoche' tutto
Pure io tempo fa' sono rimasto ipnotizzato dalle procedure per
importare/esportare previste dal codice, ma poi ti accorgi che se c'hai
una virgola di troppo non funziona piu' niente
Una roba del tipo:

fileNumber = FreeFile ' Assegna un numero file disponibile

Open "C:\file.txt" For Input As fileNumber ' Apre in lettura

If Not EOF(fileNumber) Then ' Verifica che il file non sia vuoto
Line Input #fileNumber, lineText ' Su lineText la riga da lavorare
.....
End If

Close fileNumber ' Chiude il file
Akery
2024-11-05 12:16:17 UTC
Permalink
Post by RobertoA
Post by Akery
Buonasera,
come posso importare tramite vba dei file csv?
i file hanno come delimitatore di campo il tab e non hanno nomi di
campo, stavo arrancando qualcosa con chatgpt ma non trovo la soluzione
Sub CollegaCSVInCartella()
     Dim percorsoCartella As String
     Dim nomeFile As String
     Dim nomeTabella As String
     Dim contatore As Integer
     Dim connessione As String
     ' Specifica il percorso della cartella contenente i file CSV
     percorsoCartella = currentproject.path & "\"
     ' Definisce la stringa di connessione specifica
     connessione =
"Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=1200;ACCDB=YES;"
     ' Cerca il primo file CSV nella cartella
     nomeFile = Dir(percorsoCartella & "\*.csv")
     ' Inizializza il contatore
     contatore = 1
     ' Ciclo per ogni file CSV trovato
     Do While nomeFile <> ""
         ' Genera il nome della tabella in base al nome del file
         nomeTabella = "CSV_" & contatore
         ' Crea il collegamento al file CSV specificando i parametri
         DoCmd.TransferText _
             TransferType:=acLinkDelim, _
             TableName:=nomeTabella, _
             FileName:=percorsoCartella & "\" & nomeFile, _
             HasFieldNames:=False, _
             SpecificationName:=connessione
         ' Passa al prossimo file CSV nella cartella
         nomeFile = Dir()
         ' Incrementa il contatore per creare un nome di tabella unico
         contatore = contatore + 1
     Loop
     MsgBox "Collegamento dei file CSV completato!", vbInformation
End Sub
Akery
Con gli automatismi, si fa prima, ma bisogna essere fortunati (che il
formato sia quello previsto, che i caporiga siano cr e non la coppia
cr+lf e tutto il resto)
A mia esperienza, fai prima a leggere una riga alla volta col "Line
Input" e poi te la smazzi come vuoi, finche' sono file di testo puoi
fare pressoche' tutto
Pure io tempo fa' sono rimasto ipnotizzato dalle procedure per
importare/esportare previste dal codice, ma poi ti accorgi che se c'hai
una virgola di troppo non funziona piu' niente
fileNumber = FreeFile ' Assegna un numero file disponibile
Open "C:\file.txt" For Input As fileNumber ' Apre in lettura
If Not EOF(fileNumber) Then ' Verifica che il file non sia vuoto
   Line Input #fileNumber, lineText ' Su lineText la riga da lavorare
   .....
   End If
Close fileNumber ' Chiude il file
grazie per la risposta, ho risolto impostando il parametro
"specificationname"

Akery

Loading...