Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] XPST Come fare per sapere se é installato MSoffice o Openoffice

Recentemente ho modificato un paio di software in VB che accedevano a Excel in
modo che lavorino con Calc.
Il problema ora � determinare da programma se � installato Openoffice o Excel,
ora ho fatto una compilazione condizionale #IF OpenOffice Then, ma questo mi
obbliga ad usare due versioni dello stesso software, sarebbe meglio mettere un
IF OpenOffice Then.
Qualche idea?
--
ciao
  Stefano

 Qualche idea?
Prova a guardare se questo ti aiuta:
http://www.oooforum.org/forum/viewtopic.phtml?t=23715
Ma cosa devi fare esattamente? Se devi solo aprire un documento credo 
che puoi semplicemente lanciare da shell il documento stesso, e Win te 
lo aprir� nel programma associato a livello di sistema tramite estensione.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3.0 Soluzioni a raccolta", molto pi� di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

lo aprir� nel programma associato a livello di sistema tramite estensione.
Lo debbo creare se non c'� poi leggere e modificare i valori di alcune celle, ma
con Excel si fa in un modo, con Calc si fa in modo molto diverso, esempio la
routine per scrivere in una celle � la stessa, dal programma chiamo la 
WriteCell, poi lui si muove a seconda della #IF, io vorrei detrminarlo prima in
modo da mettere in una variabile Global il valore ExcelInstalled.
Credo che dovr� forzare un apertura ad Excel con una On Error, sperando che non
si incasini il s.o., ma speravo ci fosse un altro modo.
___________________
Sub WriteCell (SheetIndex As Integer, Row As Integer, Column As Integer, _
                      Value As Variant, Optional Tipo As TipoDato, _
	         Optional Largh As Double, _
                      Optional HorAlign As Variant)
#If ExcelInstalled Then
'Scrive il valore Value nella cella (Row,Column)del Foglio numero SheetIndex
 With xlapp.Worksheets(SheetIndex).Cells(Row, Column)
    .Value = Value  'Scrive il valore
    .NumberFormat = SetCellFormat(Tipo)    'Definisce il formato della cella
    .ColumnWidth = Largh
'   .RowHeight
    .HorizontalAlignment = HorAlign
 End With
#Else
Dim CalcCell As Object
Set CalcCell = xlSheet.getCellByPosition(Column - 1, Row - 1)
'MsgBox ("value : " & CalcCell.Value)
If Tipo = xlText Then
   CalcCell.String = Value
ElseIf Tipo = xlNumber Then
   CalcCell.Value = Value
End If
If HorAlign = xlHAlignCenter Then '1=Right, 2=Centre, 3=Left
   CalcCell.ParaAdjust = 3
ElseIf HorAlign = xlHAlignLeft Then
   CalcCell.ParaAdjust = 2
End If
   CalcCell.Columns.Width = Largh * 200
   CalcCell.Rows.Height = 500
#End If
End Sub
--
ciao
  Stefano

 dovrei provare se su sVista va.
Credo che il problema sia scrivere, non leggere.


 Qualche idea?
Crei un object excel.application in late binding e ne gestisci l'errore?

Il giorno Mon, 21 Sep 2009 12:13:36 GMT, "Andrea [Work]"
<andrea.isw...@gmail.invalid> ha scritto:

Mmm, quindi la scelta � tra un accesso al registro di Windows che magari cambia
con le versioni sia del s.o. che dell'eseguibile, e l'apertura di un Excel con
On Error Goto, sperando che non combini casini.
Ho chiesto per scupolo, sperando magari che ci fosse un'altra strada che non mi
era venuta in mente.
Grazie comunque.
--
ciao
  Stefano

 con le versioni sia del s.o. che dell'eseguibile
Io ho provato controllando il registro, e mi pare che sia OK. Testato 
sotto Vista, programma in .NET.
Se vuoi provare sul tuo sistema:
http://cid-fb2e35f564c66807.skydrive.live.com/self.aspx/Files/OOoDetect.zip


 On Error Goto, sperando che non combini casini.
Questo � il funzionamento standard da usare con la CreateObject in late
binding.
Oppure lasci all'utente la modalit� di scelta.
Anche perch� se uno ha excel installato non � detto che non voglia usare
Calc.
Banalmente, ufficio con 10pc, 1 licenza di office su 1pc. Lui magari vuol
usare Calc perch� ce l'hanno anche gli altri PC.
Oppure ha un office vecchia versione e preferisce usare Calc e usa office
solo per qualche documento.
Io per cose analoghe metto la macro nel documento, io esporto i dati in
file di testo che poi rileggo da documento.
Cos� facendo ci pu� essere qualsiasi sw che preveda macro, e da codice sei
indipendente e senza legami.
Inoltre le personalizzazioni le fai direttamente nel "template" del
cliente, e non vai a sporcare il codice con varie versioni di vari clienti.


http://cid-fb2e35f564c66807.skydrive.live.com/self.aspx/Files/OOoDetect.zip
Quale chiave?
Guardando con Regedit  non ho la 
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/App
Paths/soffice.exe
sotto:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/ 
non ho:
  /App Paths/soffice.exe
e non ho neanche 
HKEY_CLASSES_ROOT\CLSID\{82154420-0FBF-11D4-8313-005004526AB4}\LocalServer32
per� il tuo software funziona, quale chiave hai usato?
--
ciao
  Stefano

 HKEY_CLASSES_ROOT\CLSID\{82154420-0FBF-11D4-8313-005004526AB4}\LocalServer32
Sicuro che non c'�? Io ho provato su due diversi PC, uno con Vista e uno 
con XP, ed � risultato sempre OK.
Ti riporto il codice che ho usato, in VB 2008:
         Dim OOoPath As Object
         OOoPath = 
My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT\CLSID\{82154420-0FBF-11D4-8313-005004526AB4}\LocalServer32", 
"", "Non trovato")
         If OOoPath.ToString <> "Non trovato" Then
             txtPath.Text = IO.Path.GetDirectoryName(OOoPath.ToString)
         Else
             txtPath.Text = OOoPath.ToString
         End If


con XP, ed � risultato sempre OK.
C'era, avevo sbagliato io a cercare.
Sono anche riuscito a leggerlo, grazie a questo:
http://binaryworld.net/Main/CodeDetail.aspx?CodeId=1542
in .net effettivamente era pi� semplice.
ciao
--
ciao
  Stefano

 era venuta in mente.
Chiederlo all'utente, una tantum, e memorizzare la scelta ?
Bye, G.

Chiederlo all'utente, una tantum, e memorizzare la scelta ?
Il fatto � che va in mano a gente che non ne capisce molto, che oltretuuto non �
mai chi intalla il sw, e in molti casi sono solo aggiornamenti.
Il programma acquisisce da alcune macchine tramite seriale dei dati sulla
produzione, gli allarmi, ecc e li mette su un foglio perch� ci possano
aggiungere qualcosa e poi alcuni lo danno in pasto ad un grosso database, (non
di mia competenza) altri fanno loro elaborazioni.
La modifica la debbo fare perch� qualcuno ha cominciato a usare OO da poco e lo
ha richiesto, ma per gli altri che usano Excel su qualche vecchio portatile
vorrei che se fanno un aggiornamento per altre ragioni non cambi nulla.
Anche perch� poi iniziano le telefonate (magari in notturna con qualche
australiano, porc...), le mail e casini vari.
La strada della lettura registro ha funzionato su 3 pc, con W2000, Xp e sVista,
debbo provare con W98 poi la approvo.
--
ciao
  Stefano

 in .net effettivamente era pi� semplice.
Allora � ora di cambiare piattaforma :-)
[OT]
Anzi, visto che recentemente mi sono ripreso una cotta da niubbo cronico 
per Lazarus Free Pascal, mi sento davvero di consigliarlo a tutti.
Un IDE e un compilatore altamente ottimizzato, entrambi 
multipiattaforma, free software e in continuo sviluppo. Write once, 
compile anywhere.
Nessun framework, nessuna libreria di supporto, tutto in un unico 
eseguibile trasportabile ovunque.
Linguaggio Object Pascal; potente, didattico e facile da imparare.
Come omaggio ho rifatto il programmino in Lazarus :-)
http://cid-fb2e35f564c66807.skydrive.live.com/self.aspx/Files/OOoDetectLazarus.zip



http://cid-fb2e35f564c66807.skydrive.live.com/self.aspx/Files/OOoDetectLazarus.zip
Per�, 676K di exe per fare una lettura di registro e un textbox.
Spero che la dimensione dell'eseguibile non sia lineare ma tenga conto delle
librerie da caricare sempre.
--
ciao
  Stefano

 librerie da caricare sempre.
Ovviamente s�. L'exe � un pacchetto tutto in uno che deve contenere 
tutto quello che gli serve per funzionare. Le dimensioni non aumentano 
di molto all'aumentare della complessit� del programma.
Qui trovi specifiche informazioni a riguardo:
http://wiki.freepascal.org/Lazarus_Faq#Why_are_the_generated_binaries_so_big.3F
