VB6 - Determinare a run-time se EXCEL è installato

lunedì 16 gennaio 2006 - 10.27

zaffiro Profilo | Newbie

Lavoro in Visual Basic 6. La mia applicazione costruisce alcuni dati statistici, esportabili in EXCEL. Come determinare a run-time se EXCEL è installato sul computer, in modo da controllare l'esportazione? Forse può bastare controllare l'eventuale errore, ma cercavo un metodo più preciso. Grazie

Cteniza Profilo | Guru

Puoi creare lo stesso un foglio excel senza che ci sia bisogno che sia installato.
Basta avere a disposizione il db di access e dare il comando:
(connetti il tuo db mdb di appoggio)
myConnection.Execute "SELECT * INTO [Excel 8.0;Database=c:\tmp\customers.xls].[Foglio1] FROM Customers"
(esempio fatto con il db nortwind)


Brainkiller Profilo | Guru

>Lavoro in Visual Basic 6. La mia applicazione costruisce alcuni
>dati statistici, esportabili in EXCEL. Come determinare a run-time
>se EXCEL è installato sul computer, in modo da controllare l'esportazione?
>Forse può bastare controllare l'eventuale errore, ma cercavo
> un metodo più preciso. Grazie

Ciao,
per vedere se è installato Excel sul PC ci sono vari modi, dal vedere nella cartella dei programmi se c'è la cartella office e se all'interno c'è excel.exe a verificare le chiavi di registro per esempio alla seguente locazione:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel

(dove 11.0 è il nuovo di versione di office che può variare 10.0, 9.0, ecc.)

ciao

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

zaffiro Profilo | Newbie

Intendo da programma!! Per vedere se è installato su un PC non ho problemi. Ma il PC è della persona su cui deve girare il mio applicativo. Ciao

zaffiro Profilo | Newbie

Proverò, ma i dati non sono sul db. Posso comunque fare una query temporanea e passarli dal db. Ma sul computer che userà il mio programma non è necessario installare nessuna dll particolare in questo caso?
Grazie ciao

Cteniza Profilo | Guru

Sub VersioneOffice()
Dim s As string
s = AppOfficeVersion(OfficeApp.Access)
s = s & vbCrLf & AppOfficeVersion(OfficeApp.Excel)
s = s & vbCrlf & AppOfficeVersion(OfficeApp.InfoPath)
s = s + vbCrLf + AppOfficeVersion(OfficeApp.OneNote)
s = s + vbCrLf + AppOfficeVersion(OfficeApp.Outlook)
s = s + vbCrLf + AppOfficeVersion(OfficeApp.PowerPoint)
s = s + vbCrLf + AppOfficeVersion(OfficeApp.Publisher)
s = s + vbCrLf + AppOfficeVersion(OfficeApp.Visio)
s = s + vbCrLf + AppOfficeVersion(OfficeApp.Word)
MsgBox s
End Sub

Private Function AppOfficeVersion(office As OfficeApp) As String
Dim Applicazioni() As String
Dim oPath As Object
Dim sApp As String
Dim sPath As String
Applicazioni = Split("MSACCESS,WINWORD,EXCEL,OUTLOOK,POWERPNT,MSPUB,ONENOTE,VISIO,INFOPATH", ",")
sApp = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"
sApp = sApp + Applicazioni(office) + ".EXE"
Set oPath = CreateObject("WScript.Shell")
On Error Resume Next
sPath = oPath.RegRead(sApp)
If Err Then
AppOfficeVersion = Applicazioni(office) + "Non installato"
Err.Clear
Exit Function
End If
AppOfficeVersion = GetOfficeVersion(sApp)
End Function

Function RegRead(sRegValue)
Dim oShell As Object
Set oShell = CreateObject("WScript.Shell")
On Error Resume Next
RegRead = oShell.RegRead(sRegValue)
'If the value does not exist, error is raised
If Err Then
RegRead = ""
Err.Clear
End If
'If a value is present but uninitialized the RegRead method
'returns the input value in Win2k.
If VarType(RegRead) < vbArray Then
If RegRead = sRegValue Then
RegRead = ""
End If
End If
On Error GoTo 0

End Function

Function GetOfficeVersion(sApp As String) As String
Dim fso As Object
Dim sFileVer As String
Dim sTmp() As String
GetOfficeVersion = "Sconosciuto"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(sApp) Then
sFileVer = fso.GetFileVersion(sApp)
If sFileVer <> "" Then
sTmp = Split(sFileVer, ".")
GetOfficeVersion = sTmp(0)
End If
End If
End Function

Magari ne manca ancora qualche pezzo


zaffiro Profilo | Newbie

Grazie CTENIZA
Alla fine ho optato per una funzione molto semplice

Public Function EsisteEXCEL() As Boolean
Dim newobj As Object
On Error GoTo controllo
Set newobj = CreateObject("Excel.Sheet")
EsisteEXCEL = True
Set newobj = Nothing
Exit Function

controllo:
EsisteEXCEL = False
Err.Clear
End Function

Anche perché non sapevo quale riferimento aggiungere per usare gli oggetti OfficeApp! Me lo sai dire? Ciao

Cteniza Profilo | Guru

Nessuno, il mio modulo guarda il registro


zaffiro Profilo | Newbie

Si però VB6 si rifiuta di compilare perchè manca l'oggetto OfficeApp.. e come si risolve questo problema?
Ciao :-(

Cteniza Profilo | Guru

Ti avevo detto che forse ne mancava qualche pezzo; Enumerazione:
Enum OfficeApp
Access = 0
Word = 1
Excel = 2
Outlook = 3
PowerPoint = 4
Publisher = 5
OneNote = 6
Visio = 7
InfoPath = 8
End Enum

Brainkiller Profilo | Guru

>Intendo da programma!! Per vedere se è installato su un PC non
>ho problemi. Ma il PC è della persona su cui deve girare il
> mio applicativo. Ciao

Ciao,
non ci siamo capiti.... ti ho indicato un trucco.

Cioè dentro la tua applicazione con le funzioni per accedere al registro verifichi se alla corrispondenza che ti ho dato di registro sono contenute delle chiavi oppure no. Nel primo caso Excel sarà installato sulla macchina dove gira l'applicazione, in caso contrario no.

Non che devi andare a controllare manualmente, lo fai all'interno del tuo programma !

ciao

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

zaffiro Profilo | Newbie

OK grazie infatti non avevo capito il senso della tua risposta. Ciao

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