VB2005 vs Excel

lunedì 05 maggio 2008 - 15.22

cable Profilo | Junior Member

Ciao a tutti,
ho realizzato un programma con VB2005 che legge dati da una centralina e li visualizza in un foglio Excel.
Sul mio PC ho installato Office2003 e tutto funziona correttamente mentre su un altro che ha Office2000 il programma solleva un'eccezione.

Io penso sia dovuto al fatto che come riferimento ho aggiunto "Microsoft Excel 11.0 Object Library" e non il 9.0 che credo sia quello corretto per Excel2000.
Il problema è che sul mio PC non ho il riferimento che mi serve.

Come faccio a fare in modo che il programma funzioni correttamente con qualsiasi versione di Excel (magari anche precedenti alla 2000)?

Per favore aiutatemi perchè non so più dove sbattere la testa!!!
Grazie .
Mauro

Brainkiller Profilo | Guru

>Io penso sia dovuto al fatto che come riferimento ho aggiunto
>"Microsoft Excel 11.0 Object Library" e non il 9.0 che credo
>sia quello corretto per Excel2000.
>Il problema è che sul mio PC non ho il riferimento che mi serve.

Probabilmente sì.
Ricordo di aver messo le mani tempo fa su questo problema.
Quello che ricordo era di instanziare Excel in questo modo cioè usando come nome classe Excel.Application senza specificare la versione. Usando questo sistema il sistema andava a istanziare il componente COM della versione Excel installata localmente se presente.

>Come faccio a fare in modo che il programma funzioni correttamente
>con qualsiasi versione di Excel (magari anche precedenti alla
>2000)?

Considera che tra il 2000 e il 2007 ci sono 4 versioni (Office 2000, XP, 2003 e 2007) andare indietro fino al 97 la vedo dura.

>Per favore aiutatemi perchè non so più dove sbattere la testa!!!
>Grazie .

Io personalmente per ovviare a questi problemi, ti consiglio invece di generare un file di Excel, di generare semplicemente un .csv che viene aperto tranquillamente da tutti gli Excel, e non hai dipendenze di DLL da tirarti dietro.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

cable Profilo | Junior Member

Ciao David,

>Probabilmente sì.
>Ricordo di aver messo le mani tempo fa su questo problema.
>Quello che ricordo era di instanziare Excel in questo modo cioè
>usando come nome classe Excel.Application senza specificare la
>versione. Usando questo sistema il sistema andava a istanziare
>il componente COM della versione Excel installata localmente
>se presente.

credo già di fare come dici(ma non riesco a farlo andare!!) , il codice che uso per la gestione del foglio Excel è il seguente:

Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
'Dim oRng As Excel.Range
Dim i, t As Byte
oXL = CreateObject("Excel.Application")
oXL.Visible = True
oWB = oXL.Workbooks.Add
oSheet = oWB.ActiveSheet
With oSheet.Range("A1", "H1")
.Font.Bold = True
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
.ColumnWidth = 25
.RowHeight = 25
End With
With oSheet.Range("A2", "H17")
.RowHeight = 15
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
End With
Dim saNames(7) As String
saNames(0) = "SPN"
saNames(1) = "FMI"
saNames(2) = "Cod Operatore"
saNames(3) = "Ora Inizio(ore:min:sec)"
saNames(4) = "Data Inizio(gg/mm/aa)"
saNames(5) = "Ora Fine(ore:min:sec)"
saNames(6) = "Data Fine(gg/mm/aa)"
saNames(7) = "Durata(gg.ore:min:sec)"
oSheet.Range("A1", "H1").Value = saNames
For t = 0 To 15 'riga
For i = 0 To 7 'colonna
oSheet.Cells(t + 2, i + 1).Value = SaveDate(t, i)
Next i
Next t
oXL.Visible = True
oXL.UserControl = True
>
>Considera che tra il 2000 e il 2007 ci sono 4 versioni (Office
>2000, XP, 2003 e 2007) andare indietro fino al 97 la vedo dura.
>
Nel senso che se riesce a funzionare correttamente con Excel2000,2003 e 2007 è già un buon risultato?

>Io personalmente per ovviare a questi problemi, ti consiglio
>invece di generare un file di Excel, di generare semplicemente
>un .csv che viene aperto tranquillamente da tutti gli Excel,
>e non hai dipendenze di DLL da tirarti dietro.

Se è la stessa cosa va benissimo, ma come si genera/gestice un .csv? Non li ho mai usati!

Grazie1000 (anche per la velocità della risposta)

Mauro

Brainkiller Profilo | Guru

>credo già di fare come dici(ma non riesco a farlo andare!!) ,
>il codice che uso per la gestione del foglio Excel è il seguente:

Ok il tuo codice mi sembra corretto.
Il problema potrebbe anche deriviare da variazioni sull'Object Model di Excel da una versione all'altra. Magari nel tuo codice fai uso di una proprietà che nella versione precedente di Excel non c'era. Per questo probabilmente ha dei problemi a funzionare.

>Nel senso che se riesce a funzionare correttamente con Excel2000,2003
>e 2007 è già un buon risultato?

Secondo me sì, hai una copertura di 8 anni di versioni di Excel.

>Se è la stessa cosa va benissimo, ma come si genera/gestice un
>.csv? Non li ho mai usati!

Facile, letteralmente .csv sta per comma-separated values.
Non è altro che un file con dentro tutti i valori separati da virgola esempio:

David De Giacomi,18,Brescia Pippo Caruso,22,Milano

e così via. Una volta che viene aperto questo file in Excel in genere lui incasella tutti i valori automaticamente nelle celle.

Se però a te serve un Excel più elaborato, con formattazioni, colori, grassetti, ecc. allora non è il caso che fa per te.
Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

cable Profilo | Junior Member

Ciao David,
ora funziona, era effettivamente un problema di proprietà non valida per la versione precedente di Excel.
Ho tolto questa parte

Dim saNames(7) As String
saNames(0) = "SPN"
saNames(1) = "FMI"
saNames(2) = "Cod Operatore"
saNames(3) = "Ora Inizio(ore:min:sec)"
saNames(4) = "Data Inizio(gg/mm/aa)"
saNames(5) = "Ora Fine(ore:min:sec)"
saNames(6) = "Data Fine(gg/mm/aa)"
saNames(7) = "Durata(gg.ore:min:sec)"
oSheet.Range("A1", "H1").Value = saNames

e per riempire le celle della prima riga uso Value 8 volte.

Tutto sembra funzioni a dovere con Excel2000 e 2003, proverò anche con il 2007.

Grazie ancora.
Mauro

Brainkiller Profilo | Guru

>Ciao David,
>ora funziona, era effettivamente un problema di proprietà non
>valida per la versione precedente di Excel.
>e per riempire le celle della prima riga uso Value 8 volte.
>
>Tutto sembra funzioni a dovere con Excel2000 e 2003, proverò
>anche con il 2007.

Perfetto !
Saluti


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5