Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. Visual Studio 6.0
VB6 - Determinare a run-time se EXCEL è installato
lunedì 16 gennaio 2006 - 10.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
zaffiro
Profilo
| Newbie
11
messaggi | Data Invio:
lun 16 gen 2006 - 10:27
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
1.509
messaggi | Data Invio:
lun 16 gen 2006 - 13:22
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
7.999
messaggi | Data Invio:
mar 17 gen 2006 - 15:44
>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
11
messaggi | Data Invio:
mar 17 gen 2006 - 20:17
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
11
messaggi | Data Invio:
mar 17 gen 2006 - 20:20
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
1.509
messaggi | Data Invio:
mar 17 gen 2006 - 20:39
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
11
messaggi | Data Invio:
gio 19 gen 2006 - 18:41
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
1.509
messaggi | Data Invio:
gio 19 gen 2006 - 18:44
Nessuno, il mio modulo guarda il registro
zaffiro
Profilo
| Newbie
11
messaggi | Data Invio:
ven 20 gen 2006 - 08:32
Si però VB6 si rifiuta di compilare perchè manca l'oggetto OfficeApp.. e come si risolve questo problema?
Ciao :-(
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
ven 20 gen 2006 - 08:35
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
7.999
messaggi | Data Invio:
ven 20 gen 2006 - 12:03
>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
11
messaggi | Data Invio:
ven 20 gen 2006 - 16:49
OK grazie infatti non avevo capito il senso della tua risposta. Ciao
Torna su
Stanze Forum
Elenco Threads
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 !