Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Lavorare con gli oggetti Excel (undicesima 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.

Come abbiamo potuto notare interagire con una sessione di Excel non va oltre le normali difficoltà del linguaggio, ma come ci si deve comportare se si desidera inserire un foglio di calcolo Excel nel proprio progetto?
Può infatti risultare scomodo dover aprire un'applicazione esterna alla propria (tempi di caricamento, focus che passa da una finestra all'altra e così via).
Vediamo quindi in questo articolo (che rappresenta una sorta di parentesi nel lungo discorso che stiamo affrontando) come utilizzare un contenitore OLE.
OLE infatti non è altro che un recipiente dove inserire un oggetto di una classe qualsiasi. La classe dell'oggetto inseribile è definito dalla proprietà Class:

OLE.Class = nome_classe

ed è rappresentata dal tipo di oggetto che si può importare nel contenitore. Alcune di queste classi sono: documento di testo, cartella Excel, foglio di calcolo Excel, documento Word, immagine bitmap, immagine jpeg e così via.
Non è necessario tuttavia indicare il nome della classe perchè quando si indica il documento da importare, Visual Basic riconosce automaticamente a quale classe appartiene.
Prima di continuare vediamo quindi i passi preliminari. Prima di tutto si dovrà importare sul piano il controllo OLE che ha la seguente icona:


Una volta trascinato sul piano si aprirà una finestra nella quale scegliere il tipo di oggetto (o meglio la classe dell'oggetto) importabile nel contenitore OLE.
Lavorando con i fogli di calcolo Excel, dovremo quindi scegliere la voce 'Foglio di lavoro di Microsoft Excel' come mostrato nella figura sotto:


Adesso tutto è pronto per poter lavorare. La primissima cosa da fare è quella di importare un foglio di lavoro Excel esistente attraverso il metodo CreateLink.
Tale metodo infatti permette di memorizzare e gestire effettivamente i dati dell'oggetto incorporato (il foglio di lavoro Excel) dall'applicazione in cui sono stati creati.

Private Sub Form_Load()
OLE1.CreateLink "C:\Documenti\VBALIST.xls"
End Sub

Dando già un primo avvio all'applicazione il foglio di calcolo dovrebbe essere visualizzato in questo modo:


Naturalmente le dimensioni della sezione del foglio visualizzata dipendono da quelle del contenitore OLE. In ogni caso è possibile effettuare un ingrandimento attraverso la proprietà SizeMode alla quale assegnare una delle seguenti costanti:

VbOLESizeClip il foglio di calcolo viene visualizzato su scala 1:1
VbOLESizeStretch il foglio di calcolo viene visualizzato in modo da occupare tutta la superficie del contenitore OLE;
VbOLESizeAutoSize il contenitore OLE prende le dimensioni del foglio di calcolo;
VbOLESizeZoom il foglio di calcolo viene ingrandito in modo da mantenere però le dimensioni originali;

Purtroppo però le operazioni possibili con il controllo OLE sono molto più limitate rispetto a quelle possibili utilizzando gli oggetti Excel.Application, Excel.Workbook ed Excel.Worksheet però nulla impedisce di rendere invisibile l'applicazione Excel e di visualizzare le modifiche compiute via via all'interno del contenitore OLE.
Ad esempio, se prendiamo come riferimento il codice visto nello scorso articolo, quello cioè che permetteva la creazione di una curva di Bèzier, possiamo adattare il progetto in modo da rendere invisibile la sessione di lavoro Excel.Application (indicata come appExcel):

Dim appExcel As New Excel.Application
Dim cartExcel As Excel.Workbook
Dim foglioExcel As Excel.Worksheet
Private Sub Form_Load()
appExcel.Visible = False
Set cartExcel = Excel.Workbooks.Add
Set foglioExcel = Excel.Worksheets.Item(1)
foglioExcel.Activate

quindi creare la curva di Bèzier:

Dim pts(1 To 4, 1 To 2) As Single
pts(1, 1) = 50
pts(1, 2) = 20
pts(2, 1) = 100
pts(2, 2) = 160
pts(3, 1) = 150
pts(3, 2) = 160
pts(4, 1) = 200
pts(4, 2) = 20
foglioExcel.Shapes.AddCurve pts

e quindi collegare il foglio di lavoro (che dev'essere esistente, quindi precedentemente salvato sul disco fisso) al contenitore OLE:

OLE1.CreateLink "C:\Documenti\bezier.xls"

A questo punto il contenitore OLE visualizzerà la curva in questo modo:


Che cosa accade però nel caso in cui s'impostino i punti in maniera differente? Si consideri il seguente caso:

Dim pts(1 To 4, 1 To 2) As Single
pts(1, 1) = 50
pts(1, 2) = 150
pts(2, 1) = 120
pts(2, 2) = 10
pts(3, 1) = 130
pts(3, 2) = 10
pts(4, 1) = 200
pts(4, 2) = 150
foglioExcel.Shapes.AddCurve pts

dando l'avvio all'applicazione si visualizzerà sempre la curva mostrata sopra mentre i punti indicati in quest'ultimo codice ruotano la curva sull'asse orizzontale. Sarà quindi necessario creare un collegamento ad un file .xls aggiornato. E l'aggiornamento del file "bezier.xls" è possibile semplicemente con un salvataggio. Se infatti si aggiunge prima di richiamare il metodo CreateLink l'istruzione di salvataggio ed eventualmente si compie un aggiornamento del contenuto del controllo OLE attraverso il metodo Refresh:

foglioExcel.SaveAs "bezier.xls"
OLE1.Refresh

il contenitore potrà visualizzare la nuova curva, in questo modo:


Questo ragionamento vale naturalmente per tutte le modifiche che s'intendere compiere sul foglio di lavoro.



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
Dim pts(1 To 40, 1 To 2) As Single
For i = 1 To 40
pts(i, 1) = i * 10
pts(i, 2) = Int(100 * Rnd)
Next i
foglioExcel.Shapes.AddCurve pts
End Sub



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