ASCII Files Reader

READ ASCII FILES MACRO v. 2.1 27/02/01 - By Gianpiero Torello

Questa macro legge un file di testo in un foglio Excel.

Il file può essere in uno dei seguenti formati: CSV, Campi separati da tabulatori o Lunghezza fissa.

All'inizio ho scritto questa macro principalmente per leggere i miei indirizzi esportati da Lotus Organizer. Volevo stampare tutti i miei indirizzi in formato tabella con tutti i numeri di telefono nella stessa colonna e gli indirizzi, fax e emails condensati. Per ottenere questo risultato dovevo lavorare parecchio tutte le volte che volevo aggiornare il mio indirizzario, così ho pensato di aggiungere la possibilità di inserire dei campi calcolati mentre leggo il file di testo. Può sembrare strano ma se date un'occhiata all'esempio sarà chiaro.

Si può usare questa macro per qualsiasi file di testo che si abbia bisogno di leggere ripetutamente e sul quale si debbano applicare lunghe e noiose formule e/o formattazioni.

Si possono anche ricodificare alcuni o tutti i contenuti dei campi.

Ma parliamo subito dell'esempio.


Load Field Field Name Offset Length Recoding Format Function
  Confidential       00  
Yes Categories     CAT @  
Yes Firstname          
Yes Lastname        
  Title        
  Jobtitle1        
Yes Company1        
  Work1street        
  Work1city        
  Work1state        
  Work1zip        
  Work1country        
  Work1tel        
... ... ... ... ... ...
Calc Tel         IF("WORK1TEL"<>"","W1: "&"WORK1TEL"&" ","")&IF("WORK2TEL"<>"","W2: "&"WORK2TEL"&" ","")&IF("WORK3TEL"<>"","W3: "&"WORK3TEL"&" ","")&IF("HOME1TEL"<>"","H1: "&"HOME1TEL"&" ","")&IF("HOME2TEL"<>"","H2: "&"HOME2TEL"&" ","")&IF("HOME3TEL"<>"","H3: "&"HOME3TEL"&" ","")&IF("CARTEL"<>"","C: "&"CARTEL"&" ","")&IF("MOBILETEL"<>"","M: "&"MOBILETEL"&" ","")&IF("PAGERTEL"<>"","P: "&"PAGERTEL"&" ","")&IF("SCHOOLTEL"<>"","S: "&"SCHOOLTEL"&" ","")&IF("OTHERTEL"<>"","O: "&"OTHERTEL"&" ","")&IF("ISDNTEL"<>"","I: "&"ISDNTEL"&" ","")
... ... ... ... ... ... ...

 

Il primo campo "Confidential" è un numerico e voglio che sia formattato a zeri quindi scrivo "00" nella colonna Format. Questo è il modo nel quale Excel definisce questo tipo di formato. È solo un esempio perché, come si può vedere, la colonna "Load Field" non contiene "Yes", quindi non verrà caricata nel foglio Excel.

Il secondo campo "Categories" sarà formattato a Testo (@) e il suo contenuto ricodificato secondo la tabella contenuta nel foglio Recoding, che sarà simile alla seguente:

Code Original Value Recode To
CAT Personal PERSONAL
CAT PUBLIC PERSONAL

Questo significa che se il campo "Categories" contiene Personal o PUBLIC, la macro lo tradurrà in PERSONAL. Qualsiasi altro valore rimarrà invariato.

Ed ora veniamo agli ultimi campi:

Il campo "Tel" ha "Calc" nella colonna "Load Field". Questo vuol dire che non sarà caricato dal file ma la macro inserirà la formula Excel contenuta nella colonna "Formula".

IF("Work1tel"<>"","W1: "&"Work1tel"&" ","")&IF("Work2tel"<>"","W2: "&"Work2tel"&" ","")&IF("Work3tel"<>"","W3: "&"Work3tel"&" ","")&IF("Home1tel"<>"","H1: "&"Home1tel"&" ","")&IF("Home2tel"<>"","H2: "&"Home2tel"&" ","")&IF("Home3tel"<>"","H3: "&"Home3tel"&" ","")&IF("Cartel"<>"","C: "&"Cartel"&" ","")&IF("Mobiletel"<>"","M: "&"Mobiletel"&" ","")&IF("Pagertel"<>"","P: "&"Pagertel"&" ","")&IF("Schooltel"<>"","S: "&"Schooltel"&" ","")&IF("Othertel"<>"","O: "&"Othertel"&" ","")&IF("Isdntel"<>"","I: "&"Isdntel"&" ","")

La formula sopra riportata concatena semplicemente tutti i numeri di telefono che non sono vuoti in un'unica cella.
Ma perché contiene "Work1tel"? Perché Work1tel non sarà caricato nel foglio Excel in quanto non sarebbe accessibile ad una formula. Invece, la macro rimpiazzerà "Work1tel" con il suo effettivo contenuto. Si notino i doppi apici: se si tratta un campo come testo, questi sono necessari. E si deve ricordare che le lettere maiuscole e minuscole sono trattate diversamente quindi deve corrispondere esattamente al nome dato nella colonna "Field Name" ("WORK1TEL" non funzionerebbe).

Se si vuole indirizzare una cella Excel dinamicamente, si utilizzi il modo di riferimento R1C1 altrimenti si finirebbe per puntare sempre alla stessa cella. Così, per esempio, per rimuovere l'ultimo trattino dalla cella alla sinistra, la formula sarà:

IF(RIGHT(rc[-1],3)=" - ",LEFT(rc[-1],LEN(rc[-1])-3),rc[-1])

Infine, quando si esegue la macro, verra' chiesto di inserire il numero del foglio dove si trova il modello soprastante. Questo e' il numero del foglio all'interno del workbook corrente. Quando si esegue la macro, quindi, il foglio contenente il modello deve essere aperto ed attivo. I dati verranno letti in un nuovo foglio.

Fare click qui per scaricare la versione 2.2.1 della macro.

Faree click qui per scaricare la versione in MS Word di questo documento.

  Inizio Copyright 2011 gtor.net - Tutti i Diritti Riservati Contatti Donazioni Collegamenti
Visite:
 0002071