Splittare (dividere, separare) un file di testo importandolo in Excel.  (valido anche per importare file di testo in excel)

 

Termine italianizzato dell'inglese To Split, che vuol dire : dividere. Vagando in quell'immensa banca dati che è la Guida in Linea di Excel (purtroppo a volte di non facile consultazione), ho trovato delle istruzioni, e curiosando fra le righe, è venuto fuori che potrebbero interessare dei "pellegrini", visto anche un certo tipo di richieste pervenutemi. Si tratta della possibilità di importare dei file di testo e comporre in un foglio di lavoro, una tabella divisa in righe e colonne con i dati provenienti dal file di testo. Sono necessari alcuni accorgimenti per ottenere un risultato valido, come quello di usare un separatore, come la virgola o il punto e virgola, tra una parola e l'altra di una stessa riga del file di testo, in modo che excel, per ogni parola e per ogni separatore, assegni la parola ad una cella, e saranno tante celle sulla stessa riga, per quante parole e separatori sono presenti nella riga del file di testo. Per ogni riga successiva presente nel file di testo, saranno assegnate altrettante righe sul foglio di lavoro. L'aspetto più interessante di questo metodo è forse rappresentato dal fatto che molti database in circolazione, conservano i loro dati non in tabelle, ma in file, magari non con estensione .Txt, ma che del Formato testo ne fanno la loro struttura, infatti i dati sono conservati in stringhe di testo dove i dati dei vari campi sono dati separati dalla virgola. Sarà possibile quindi importare uno di questi database perchè Excel provveda a creare una tabella con i dati così caricati. E conosciamo tutti l'importanza di lavorare con Excel con dati inquadrati in tabelle.. Potremo anche predisporre dei nostri file di testo per creare elenchi da importare e gestire in Excel. Esemplificando, potremmo disporre di un file di testo come l'esempio sotto:

nome file: Miofile.txt

Codice,Articolo,costo,ricarico,prezzo,aliva,imp.iva,vendita

2210ab,borsa,36,80%,,20

2310ab,borsello,41,90%,,20

2410ab,busta,36,100%,,20

2410bb,bustina,25,100%,,20

e questa sarà la tabella che Excel ci creerà facendogli importare un file di testo compilato come l'esempio sopra (va da se che le formule nelle celle le dovremo compilare DOPO aver importato il file) :

Precisazioni : nel file di testo, dopo i valori di percentuale, ci sono due virgole senza nessun valore in mezzo: Excel interpreta lo spazio vuoto tra due virgole, come uno scarto di colonna, tant'è che nella tabella i valori corrispondenti (20) vengono posizionati nella colonna "aliquota iva" come deve essere. Attenzione al formato celle che ospiteranno i dati, dovranno essere settate in funzione del tipo di dato che ospiteranno; la colonna D è stata impostata a formato celle: "percentuale". Questo per evitare interpretazioni errate da parte di Excel. Una precisazione : per importare valori con decimali, non si può adoperare la virgola, perchè Excel la interpreta come separatore di elenco, ma il punto e virgola. Questa comunque la routine, dove dovrà essere indicato il percorso completo del file da importare, mentre sarà possibile definire in quale cella far importare il file; nell'esempio ho usato la A1:

Sub miofile()
With ActiveSheet.QueryTables.Add(Connection:="Text;C:\Documenti\Miofile.Txt", Destination:=Range("A1"))
.Name = "Split"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierSingleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub

Se poi si desiderasse rendere variabile il nome del file di testo da aprire (ed il percorso che mira al file), possiamo sfruttare il metodo GetOpenFileName, che ci consente di specificare l'estensione del file da cercare (Txt in questo caso) e che ci permette di ottenere la classica finestra "Apri File", nella quale selezionare il file da importare confermando nella stessa con l' OK; basta fornire il nome della variabile scelta  al metodo Add della QueryTables, così:

Sub miofile()

FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt") 'così si apre la finestra per la scelta di un 'file txt- "FileDaAprire" sarà uguale al percorso completo che mira al file che avremo selezionato
If FileDaAprire = False Then Exit Sub '
se non si scegle un file, si esce dalla sub, altrimenti nella stringa di 'connessione si usa la variabile "FileDaAprire"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range("A1"))
.Name = FileDaAprire
.FieldNames = True
.RowNumbers = False

ecc.ecc   

SE ancora volessimo poi rendere variabile anche l'indirizzo della cella dalla quale iniziare ad importare, basta inserire una InputBox che ci chiederà di specificare l'indirizzo di cella, ed usare detta variabile assegnandola  all'argomento Destination, così:

Sub miofile()
FileDaAprire = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If FileDaAprire = False Then Exit Sub
Dove = InputBox("SCRIVI L'INDIRIZZO DELLA CELLA DA DOVE INIZIARE A IMPORTARE")
If Dove = "" Then Exit Sub
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileDaAprire & "", Destination:=Range(Dove))

.Name = FileDaAprire
.FieldNames = True

ecc.ecc.

Per l'indirizzo della cella NON ci dovremo scordare di usare il formato A1: prima la lettera di colonna seguita dal numero di riga.

 

Alcune considerazioni: l'istruzione si basa sull'oggetto QueryTables che utilizza il metodo Add per creare una (letteralmente) "tavola di consultazione" con dati provenienti da una fontedati (in questo caso un documento di testo). La QueryTables possiede numerose proprietà che consentono di "pilotare" le impostazioni nella formazione della tabella. Quì sotto riporto alcune spiegazioni, mentre invito gli eventuali interessati ad andarsi a scoprire le altre nella guida in linea (del Visual Basic Editor).

Parametri da modificare per:

IMPORTARE TESTO SEPARATO DA VIRGOLA PER AVERE TESTO SU PIU' COLONNE (esempi precedenti):

.AdjustColumnWidth = True
.TextFileTextQualifier = xlTextQualifierSingleQuote
.TextFileCommaDelimiter = True

 

 

IMPORTARE TESTO SEPARATO DA PUNTO E VIRGOLA PER AVERE TESTO SU PIU' COLONNE (in questo caso è possibile usare la virgola per definire numeri decimali):

.AdjustColumnWidth = True
.TextFileTextQualifier = xlTextQualifierdDoubleQuote
.TextFileCommaDelimiter = False

 

 

IMPORTARE TESTO SEPARATO DA VIRGOLA PER AVERE TESTO SU UNA COLONNA (stile CSV, separato da virgole):

.AdjustColumnWidth = False
.TextFileTextQualifier = xlTextQualifierSingleQuote
.TextFileCommaDelimiter = False

 


I file .CSV sono file che è possibile usare come database per il Web. Il motore di ricerca usato nella sezione "le vs domande" su questo sito, sfrutta codice Javascript per "pescare" i dati che formano il database del motore, in un file .CSV, che si ottiene salvando un solo foglio di Excel, selezionando come formato di salvataggio il formato .CSV. A chi interessa può leggersi su "le vs domande", pag. 6, "salvare file in formato .csv", dove è presente anche la routine per farlo.

 

Buon lavoro.