Vb.Net: leggere dati da un file di testo e inserirli in un foglio Excel esistente usato come modello

Il titolo del post presenta gi?† in modo diretto ed esauriente quello che sar?† l’argomento. Riporto infatti, adeguatamente spiegato e commentato, il codice di una mini Console Application in Visual Basic.Net (2005, framework .Net 2.0) che mi son scritto ad hoc per copiare dei dati contenuti in un file di testo su un foglio Excel dato come modello in modo del tutto automatico, lanciando solo l’applicazione da linea di comando.
Prima cosa, al solito, aggiungere il riferimento ai componenti Excel. In visual studio si va in Project, Add Reference (“Aggiungi Riferimento” nella versione in ita) e nel tab “COM” si cerca “Microsoft Excel 10.0 Object Library”, lo si seleziona e si da OK.
Veniamo al codice:

Sub Main()
Dim n As Integer
Dim i As Integer

'creo una nuova istanza dell'oggetto Excel Application
Dim appExcel As New Excel.Application

'dichiaro una cartella di lavoro
Dim wbookExcel As Excel.Workbook

'dichiaro un foglio di lavoro
Dim foglioExc As Excel.Worksheet

Siccome i dati li devo inserire in un ben determinato range di celle definisco colonna iniziale e finale e riga iniziale e finale di tale range.

Dim firstCol As Integer = 2
Dim lastCol As Integer = 16
Dim firstRow As Integer = 12
Dim lastRow As Integer = 21

'dichiaro un'oggetto StreamReader
'che user?? per leggere dal file di testo
Dim objReader As StreamReader

'rendo visibile il foglio excel (apro l'applicazione)
appExcel.Visible = True
appExcel.Workbooks.Add()

In questo caso il file Excel di esempio usato come modello si trova nella stessa directory di dove verr?† fatto girare il programma:

'Apro il file excel usato come modello
wbookExcel = appExcel.Workbooks.Open(CurDir() + "\Analisi.xls")

'Vado a lavorare sul foglio desiderato della cartella
'indicandone il nome
foglioExc = appExcel.Worksheets("Tabella2")

'Associo lo streamReader al file da leggere
objReader = New StreamReader("utilizzazione1.txt")

Inserisco i dati nelle celle desiderate con un un ciclo annidato:

'Inserisco i dati nelle posizioni desiderate
For i = firstRow To lastRow
For n = firstCol To lastCol

'scrivo il valore letto nella cella
foglioExc.Cells(i, n).Value = objReader.ReadLine().Replace(".", ",")

Next n
Next i

A questo proposito occorre fare una importante precisazione e cio?® che qui, avendo sempre lo stesso numero di valori (150 nel mio caso) da inserire e sempre nello stesso range di celle, non ho fatto particolari controlli o gestito eccezioni. Se ad esempio nel file di testo avessi meno di 150 valori verrebbe generata un’eccezione perch?® tenterei una lettura impossibile una volta raggiunto il numero di valori presenti nel file.

Altra cosa:
Il metodo Replace cos?¨ invocato mi va a sostituire nella stringa che ho letto tutte i punti con le virgole. Questo ho dovuto farlo semplicemente perch?® i miei dati erano dei numeri con la parte decimale separata dal punto (output di un programma in C) mentre su Excel, avendo la versione in italiano, li dovevo inserire separati dalla virgola.

'Salvo con un altro nome cosi non altero il modello
foglioExc.SaveAs(CurDir() + "\Utilizzazione1.xls")

'chiudo
appExcel.Quit()
End Sub

This entry was posted in $1$s. Bookmark the permalink.

3 thoughts on “Vb.Net: leggere dati da un file di testo e inserirli in un foglio Excel esistente usato come modello

  1. Ciao dede sto usando il tuo metodo ma ho una piccola difficolt?†,
    quando assegno un nome al foglio excel nel modo indicato sotto
    va bene

    foglioExc = appExcel.Worksheets(“Tabella2”)

    ma se voglio assegnarli un nome da variabile, per esempio

    foglioExc = appExcel.Worksheets(cod_prod)

    mi restituisce un errore in cui dice che l’indice non ?® corretto,potresti dirmi qual’?® la sintassi corretta per dirgli che si tratta di un parametro/variabile e non di un nome fisso?
    esempio

    foglioExc = appExcel.Worksheets( & cod_prod & )
    non funziona

    grazie per un eventuale disponibilit?†

  2. Allora, la variabile la devi passare normalmente, senza alcun tipo di carattere speciale, per?? il valore della variabile stringa deve essere un valore uguale al nome di un foglio esistente nel file Excel, perch?® stai effettuando la selezione del foglio del progetto sui cui lavorare. Mi spiego meglio:
    Se tu dichiari
    Dim stringa As String = "Tabella2"
    puoi passarlo poi al comando
    foglioExc = appExcel.Worksheets(stringa)
    purch?® nel documento Excel esista uno sheet (foglio) che si chiama Tabella2. Quindi devi modificare prima il nome degli sheet del tuo foglio modello. Io nel mio esempio ho messo direttamente la stringa perch?® sapevo con precisione su quale foglio dovevo lavorare, ma se utilizzo una dichiarazione come quella qui sopra funziona ugualmente perch?® ho lo sheet chiamato Tabella2 nel mio documento. Se dichiarassi la variabile stringa come Tabella9 che non c’?®, mi darebbe un errore di indice non corretto come dici tu, perch?® non troverebbe nessuno foglio con quel nome.

    Prova e dimmi. Ciao.

  3. Pingback: Dede Blog » VB.Net ed Excel: formattare i dati contenuti nelle celle

Leave a Reply

Your email address will not be published. Required fields are marked *