Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Lavorare con gli oggetti Excel (nona parte)

Premessa

Come già visto nelle lezioni precedenti, i requisiti fondamentali per poter interagire con gli oggetti di Excel sono due: avere installato una copia di Microsoft Excel ed aver precedentemente caricato la libreria oggetti di Excel disponibile nella finestra di dialogo Riferimenti. Per una maggiore comprensione, la finestra si apre cliccando sulla voce Progetto del menu principale e selezionando dal menu Progetto che si aprirà, la voce Riferimenti che è quella accompagnata dall'icona dei libri. Basterà poi selezionare la voce Microsoft Excel Object Library per poter utilizzare tutti gli oggetti di cui la libreria in questione si compone.

Può risultare particolarmente utile per chi sviluppa una macro o chi utilizza fogli Excel nel proprio progetto andare ad importare un testo, una lista o più in generale una serie di dati da un documento esterno.
Esiste un metodo molto efficace per evitare di compiere complesse operazioni manuali (apertura del file, estrazione di ogni riga, chiusura del file, esame di ogni dato estratto).
Il metodo in questione è OpenText. Attraverso OpenText viene aperto e analizzto un file di testo come nuova cartella di lavoro con un singolo foglio contenente i dati del file di testo analizzato. Quindi, unica limitazione del metodo, non è possibile importare direttamente il contenuto di un file di testo in un foglio di lavoro esistente.
Ecco come si presenta la sintassi di OpenText:

appExcel.Workbooks.OpenText(Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)

Vediamo ora di analizzarla con calma: prima di tutto si nota che il metodo è applicabile all'insieme Workbooks dell'istanza appExcel.
Il primo parametro obbligatorio, Filename è il nome del file di testo da aprire. Ad esempio se creiamo un file tags.txt nella cartella "C:\Documenti" nel quale inseriamo una lista qualsiasi, come la seguente:


dovremo indicare il percorso "C:\Documenti\tags.txt". Il secondo parametro richiesto, Origin è invece opzionale ed indica la piattaforma di provenienza del file. Le scelte sono limitate alle costanti del gruppo xlPlatform ossia xlMacintosh, xlWindows oppure xlMSDOS.
Il parametro StartRow indica invece il numero della riga dalla quale partire nel processo di importazione del testo dal file .txt al foglio di lavoro Excel.
Così se ad esempio si indica StartRow = 2, verranno importate tutte le righe a partire dalla seconda.
Anche il parametro DataType è opzionale: indica il formato di colonna dei dati. Il formato può essere a scelta xlDelimited se si desidera che il file sia delimitato da caratteri delimitatori oppure xlFixedWidth se i dati del file devono essere ordinati in colonne di larghezza fissa.
Andando oltre troviamo il parametro TextQualifier, anch'esso opzionale che imposta il qualificatore di testo che avvisa l'applicazione che i dati racchiusi da tale qualificatore sono in formato testo. Ad esempio si può impostare il qualificatore di testo come virgoletta singola " ' " impostando TextQualifier su xlTextQualifierSingleQuote, come virgoletta doppia " " " impostandolo su xlTextQualifierDoubleQuote oppure disabilitando questa opzione indicando xlTextQualifierNone.
Altro parametro sempre opzionale è ConsecutiveDelimiter che, impostato su True considera due delimitatori consecutivi (ad esempio due virgolette singole una dietro l'altra " '' ") come un delimitatore unico. Naturalmente questo non vale se il parametro TextQualifier è stato ignorato oppure se ha valore xlTextQualifierNone.
Tab, se impostato su True considera il carattere di tabulazione come delimitatore.
Semicolon, se impostato su True considera il carattere punto e virgola " ; " come delimitatore.
Comma, se impostato su True considera il carattere virgola " , " come delimitatore.
Space, se impostato su True considera il carattere spazio " " come delimitatore.
Other, se impostato su True consente di utilizzare come delimitatore il carattere indicato dal parametro successivo ossia OtherChar.Se vengono specificati più caratteri, verrà utilizzato solo il primo carattere della stringa e gli altri caratteri verranno ignorati.
FieldInfo consente invece di indicare una matrice contenente informazioni di analisi per singole colonne di dati. DecimalSeparator specifica il separatore decimale utilizzato in Excel per il riconoscimento dei numeri ed infine ThousandsSeparator specifica il separatore delle migliaia utilizzato in Excel per il riconoscimento dei numeri.
Adesso che i parametri sono stati analizzati, vediamo come importare nel modo più semplice i dati del file di testo tags.txt in un nuovo foglio di calcolo.
Siccome i parametri sono tanti e la possibilità di confusione è elevata, vediamo prima come richiamare il metodo esplicitando i singoli parametri:

appExcel.Workbooks.OpenText FileName:="C:\Documenti\tags.txt", DataType:=xlDelimited, tab:=True

utilizzando invece la notazione tradizionale:

appExcel.Workbooks.OpenText "C:\Documenti\tags.txt", , , xlDelimited, , , True

In entrambi i casi il risultato sarà il seguente:


Lo stesso ragionamento fatto per il metodo OpenText può essere esteso ad un secondo metodo ossia TextToColumns che consente una semplice gestione delle celle che contengono un testo esteso su più colonne. L'esempio grafico riportato sotto mostra il caso in questione:


La sintassi prevista del metodo è del tutto simile a quella del metodo visto in precedenza:

Range.TextToColumns(Destination, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)

con due differenza fondamentali: la prima è che il metodo si riferisce ad un oggetto Range. ossia ad un gruppo di più celle.
La seconda è costituita dal parametro Destination che specifica la destinazione della separazione del testo che supera eventualmente il limite della colonna.
Tutti gli altri parametri hanno lo stesso significato sia nel caso di OpenText che nel caso di TextToColumns.
Proviamo a fare un esempio veloce. Copiamo negli Appunti un testo qualsiasi formato da una o più frasi. Dopodichè diamo l'avvio al seguente codice (che naturalmente deve essere integrato con l'inizializzazione degli oggetti 'applicazione', 'foglio di lavoro', 'foglio di calcolo', come visto nei primi articoli)

foglioExcel.Activate
foglioExcel.Paste

Il risultato sarà che tutto il testo viene trasportato dagli Appunti al foglio di calcolo in tante righe quante sono le righe del testo, occupando quindi (se il testo è sufficientemente lungo) più dello spazio delimitato dalla colonna:


Adesso invece proviamo ad utilizzare il metodo TextToColumns indicando come separatore per ogni singola cella lo spazio (parametro Space impostato su True):

foglioExcel.Activate
foglioExcel.Paste
Selection.TextToColumns , xlDelimited, , True, , , , True

e come si può vedere dal risultato:


tutte le righe del testo vengono suddivise in tante celle quante sono le parole con una parola per cella.
Naturalmente i metodi di suddivisione possono essere i più svariati, indicando ad esempio di suddividere il testo dopo ogni virgoletta, ogni punto e virgola e ogni qualsiasi altro carattere personalizzato.



Soluzione dell'esercizio precedente:

Dim appExcel As New Excel.Application
Dim cartExcel As Excel.Workbook
Dim foglioExcel As Excel.Worksheet
Private Sub Form_Load()
appExcel.Visible = True
Set cartExcel = Excel.Workbooks.Add
Set foglioExcel = Excel.Worksheets.Item(1)
foglioExcel.Activate
foglioExcel.Range("A1", "H8").Formula = "=INT(RAND()*(30-10)+10)"
Dim Password As Integer
foglioExcel.Range("A1", "H8").FormulaHidden = True
Password = appExcel.WorksheetFunction.Sum(foglioExcel.Range("A1"), foglioExcel.Range("A2"))
foglioExcel.Protect (Password)
End Sub

Esercizio:

Proponiamo in questa lezione un semplice esercizio per cominciare a prendere confidenza con i concetti appresi nell'articolo corrente e in tutti i precedenti. La soluzione dell'esercizio sarà pubblicata nel corso del prossimo articolo.

1) aprire ed attivare una nuova sessione, una cartella ed un foglio di calcolo Excel.

2) creare un file di testo denominato 1.txt ed aggiungervi il seguente testo:
23323,34903,394,5450,33092,2309,305905,340921,68403,91093,59302,39466, 59643,38502,56530,23055,43,9505

3) importare il testo di 1.txt in un foglio di calcolo e suddividere il testo usando come delimitatore la virgola. Ecco un esempio di come può essere impostata l'applicazione:





Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it