› Excel e gli applicativi Microsoft Office › Salvataggio CSV
-
AutoreArticoli
-
Ciao,
di seguito il mio quesito:
In una cartella windows ho un file in formato .csv il cui nome può variare ma non la cartella in cui si trova . Vorrei come prima operazione salvare il csv in formato .xls in una cartella predefinita e nominarlo come pippo e la data odierna in formato inglese (es pippo20181219)
Infine vorrei poter importare tramite macro il csv all'interno del file .xlsm su cui lavoro. L'incognita di base è che il nome del file .csv non è costante
Grazie in anticipo
Ciao
Nella cartella hai più file?
C'è un parametro con cui selezionare quello che vuoi importare?
Per esempio vuoi importare il file con la daata uguale a qulla contenuta nella cella XY
Altra possibilità selezionare il file tramite una finestra come quella usata da excel per aprire o salvare un file.
Ciao
Luca
Ciao nella cartella dove si trova il .csv c'è sempre e solo un file .csv. Vorrei poterlo salvare senza doverlo selezionare tramite finestra. Stessa cosa per l'importazione all'interno del file .xlsm; dato che il file csv è uno solo vorrei evitare di specificarlo. L'unica variabile è appunto il nome.
Se non vengono cambiati i formati (tipo numero, testo..)se risulta più semplice si potrebbe importare direttamente il file excel precedentemente salvato.
Quando salvi il file elimini il precedente?
Se quando importi c'è solo un file, il gioco è fatto, si importa quello a prescindere dal nome.
si si sto predisponendo la procedura in maniera tale da avere sempre solo un file nella cartella
Prima parte
Sub CopiaCSVtoXlsx() Dim FolderOrig As String Dim FolderDest As String Dim NomeFile As String Dim mioWB As Workbook Dim Aggiunta FolderOrig = "C:\Users\ma036650\Desktop\AA" FolderDest = "C:\Users\ma036650\Desktop\BB" NomeFile = "pippo" Aggiunta = "" On Error GoTo GestErr Set mioWB = Workbooks.Open(Filename:=FolderOrig & "\" & Dir(FolderOrig & "\*.csv")) mioWB.SaveAs Filename:=FolderDest & "\" & NomeFile & Format(Date, "yyyymmdd") & Format(Aggiunta, "_00") & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False mioWB.Close Exit Sub GestErr: If Aggiunta = "" Then Aggiunta = 1 Else Aggiunta = Aggiunta + 1 End If Resume End SubLa macro qui sopra cerca il primo file che trova nella cartella FolderOrig (puoi o scriverla o collegarla ad una cella) lo apre e lo salva come xlsx nella FolderDest. In caso lo trovi già esistemte aggiunge un "_0x".
Il nome del file di arrivo è NomeFile più la data. NomeFile è definito all'interno della macro ma può essere collegato ad una cella.
Cosa ne pensi? fa al caso tuo?
Ciao
Luca
L'aggiunta dell'istruzione
Kill (FolderOrig & "\" & Dir(FolderOrig & "\*.csv"))dopo
mioWB.Closeti permette di eliminare (cancellare) il file originale.
Riguardo all'importare il csv nel file corrente la cosa è semplice da fare ma abbastanza complicato generalizzarla in quanto l'importazione dipende da tutti i parametri che tu determini quando importi (ovvero se sono campi a lunghezza fissa o delimitata, il tipo di delimitatore, se importi tutte le righe o no, se importi in un nuovo foglio oppure no,....) insomma tutte le cose che dici a excel quando importi un csv.
a tal file ti consiglio di registrare una macro come importi tu. poi il nome del file lo puoi trovare come vedi nella macro precedente e poi modifiche la macro registrata pe rle tue esigenze.
fammi sapere.
Ciao
Luca
Ciao! Innanzi tutto grazie.
Dunque ho provato la macro e apre il .csv e lo esporta correttamente con il nome. L'unico problema è che il file esportato il .xlsx rimane con i delimitatori di testo (punto e virgola) e non diviso. Provo a spiegarmi meglio: se apro il csv direttamente con Excel il file è diviso correttamente nelle colonne. Uguale risultato se lo provo ad esportare in manuale.
Ti allego il file .csv di prova
lo so non riesco ad allegare i file .csv . Mi compare questo errore
<em>Errori di caricamento:</em>
<em>esempio.csv: Questo tipo di file non è permesso per ragioni di sicurezza.</em>Aggiornamento
L'ho caricato tramite .rar!
Allegati:
You must be logged in to view attached files.Certo! in allegato il file in formato zip
Allegati:
You must be logged in to view attached files.Ciao
ho dovuto complicarla un pochino per risolvere il problema
Ho pensato che hai detto che dovevi importare il file .csv nel tuo file xlsm.
L'ho implementato creando un foglio che si chiama IMPORT.
Successivamente tale foglio viene salvato in una cartella diversa e salvata nel folder di destinazione.
Fammi sapere se il
Sub CopiaCSVtoXlsx() Dim FolderOrig As String Dim FolderDest As String Dim NomeFile As String Dim mioWB As Workbook Dim OrigWB As Workbook Dim mioFGL As Worksheet Dim FoglioW As Worksheet Dim Aggiunta Set OrigWB = ActiveWorkbook ' assegno alla variabile il Workbook attivo FolderOrig = "C:\Users\ma036650\Desktop\AA" 'cartella di rigine FolderDest = "C:\Users\ma036650\Desktop\BB" 'cartella di destinazione NomeFile = "pippo" 'nome assegnato al file prima della data Aggiunta = "" 'variaile per gestire il nome file in caso di errore On Error GoTo ErroreFoglio OrigWB.Sheets("IMPORT").Select 'usando la gestione erori veirfico se il foglio esiste se non esiste lo creo Set mioFGL = OrigWB.Sheets("IMPORT") 'assegno il folgio alla variabile mioFGL.Cells.Clear 'cancello il contenuto del folgio ' da qui in avanti importo i dati With mioFGL.QueryTables.Add(Connection:= _ "TEXT;" & FolderOrig & "\" & Dir(FolderOrig & "\*.csv"), Destination:=Range("$A$1")) .Name = "esempio" .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 .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Set mioWB = Workbooks.Add 'creo un nuovo workbook mioFGL.Copy Before:=mioWB.Sheets(1) 'copio il file nel nuovo workbook Application.DisplayAlerts = False 'questo per evitare che mi chieda se volgio veramente cancella re il foglio For Each FoglioW In mioWB.Sheets 'routine per cancella re i fogli diversi da IMPORt nel novo workbook If Not FoglioW.Name = mioFGL.Name Then FoglioW.Delete End If Next FoglioW Application.DisplayAlerts = True On Error GoTo GestErr ' qui sotto salvo il workbook nuovo nel folder di destinazione con il nome ugiule a qllo scelto più la data mioWB.SaveAs Filename:=FolderDest & "\" & NomeFile & Format(Date, "yyyymmdd") & Format(Aggiunta, "_00") & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False mioWB.Close 'chiudo il file ' l'istruzione qui sotto mi cancella il file csv (se serve cancellarlo basta togliere l'apice) 'Kill (FolderOrig & "\" & Dir(FolderOrig & "\*.csv")) Exit Sub ErroreFoglio: With Sheets.Add .Name = "IMPORT" End With Resume GestErr: If Aggiunta = "" Then Aggiunta = 1 Else Aggiunta = Aggiunta + 1 End If Resume End SubPerfetta! Funziona alla grande, grazie anche per aver commentato i passaggi. Ti volevo chiedere solo se mi potevi spiegare perché nella macro precedente l'esportazione variava i dati. Come l'avevi impostata per quel che ne capisco mi sembrava corretta, apriva il foglio .csv e lo salvava nel formato giusto..
-
AutoreArticoli
