Java týden Java týden
Pouze tento týden sleva až 80 % na celý Java e-learning!
Brno? Vypsali jsme pro vás nové termíny školení OOP v Brně!
Avatar
Martin Krejčí:17. března 14:25

Zdravím,

potřeboval bych zde ošetřit stav, kdy uživatel nemá nainstalovaný Excel - otázka je, jak to udělat správně (vím, začátečnická - učím se "za pochodu" tak prosím o trpělivost :-) )?

Sub Open(openThis As String)
        Dim xls As Excel.Application
        Dim workbook As Excel.Workbook
        xls = New Excel.Application With {
            .Visible = True,
            .WindowState = XlWindowState.xlMaximized,
            .DisplayFormulaBar = False
        }
        workbook = xls.Workbooks.Open(openThis)
    End Sub

Zkusil jsem: Možná by bylo možné kontrolovat Application.Ver­sion, ale určitě existuje i lepší řešení, ne?

Chci docílit: Co nejefektivněji a spolehlivě zjistit přítomnost Office na PC uživatele - pokud je nainstalovaný, zjistit verzi, pokud ne, ukončit aplikaci.

 
Odpovědět 17. března 14:25
Avatar
JerryM
Člen
Avatar
Odpovídá na Martin Krejčí
JerryM:17. března 14:46

já bych od MS VisualBasicFo­rApplication rychle utek někam pryč .... :) je to nestabilní a padá to ...

https://www.codeproject.com/…d-in-the-Sys

https://stackoverflow.com/…ists-on-a-pc

 
Nahoru Odpovědět 17. března 14:46
Avatar
Odpovídá na JerryM
Martin Krejčí:17. března 15:43

Děkuji. Ale hlásí mi to chybu syntaxe, officeType není deklarované, argumenty metody musí být v závrokách, type je typ třídy a nejde použít jako výraz a ještě něco o závorkách. Tak nevím.

 
Nahoru Odpovědět 17. března 15:43
Avatar
JerryM
Člen
Avatar
JerryM:17. března 17:44

no ... jde o to že syntaxe je závislá na verzi Office :) je to nemilé ale je to tak..
jinak mužeš z VBA zavolat externí aplikaci .exe napsanou třeba v C# a v ní to detekovat ale
tohle funguje:

Type officeType = Type.GetTypeFrom­ProgID("Excel­.Application");
if (officeType == null)
{
//no Excel installed
}
else
{
//Excel installed
}

 
Nahoru Odpovědět 17. března 17:44
Avatar
Odpovídá na JerryM
Martin Krejčí:17. března 18:33

Aha tak to je nedorozumění. Tohle totiž má být ta externí aplikace, která následně otevře Excel tabulku. Omlouvám se, měl jsem to napsat.

 
Nahoru Odpovědět 17. března 18:33
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Martin Krejčí
hanpari:17. března 21:26

Toto ti nepomůže?

http://www.vbforums.com/showthread.php?…

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 17. března 21:26
Avatar
Martin Petrovaj
Překladatel
Avatar
Martin Petrovaj:17. března 22:00

Ak ti ide o to zistiť, či je na počítači nainštalovaný Office (prípadne aj nejaký iný program), prečo sa nepozrieš do registrov?

https://stackoverflow.com/…via-registry
https://docs.microsoft.com/…registry-key

Nahoru Odpovědět 17. března 22:00
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Martin Krejčí:17. března 22:07

Důvody jsou dva: přečetl jsem si někde, že ta cesta k registru nemusí být vždy stejná a taky jestli se nepletu bych musel mít administrátorská práva, nebo to jde bez toho?
Řešení od @hanpari bude asi fungovat. Pak se sem vrátím označit odpověď, ale pokud existuje lepší řešení, ocením.

 
Nahoru Odpovědět 17. března 22:07
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Martin Krejčí
Martin Petrovaj:17. března 22:20

Čítať z týchto registrov môžeš určite aj bez administrátorských práv (https://stackoverflow.com/…r-privileges).

Čo sa týka tej cesty, tak nevidím dôvod, prečo by si sa toho mal báť práve pri Office. Základná štruktúra je vždy daná a v normálnom systéme rovnaká (https://docs.microsoft.com/…the-registry) a cesta ku kľúču Office sa tiež IMHO líšiť nebude (neviem si predstaviť, že by to Microsoft len tak menil, ani aké by na to mal dôvody). Nachádza sa pod kľúčom HKEY_LOCAL_MACHINE > SOFTWARE >Microsoft > Office. To je dosť jednoduchá cesta a asi sa medzi strojmi nemá ani ako líšiť. Možno máš ale lepšie informácie ako ja a existujú nejaké corner cases. Pokiaľ ich ale nepotrebuješ podporovať, tak to asi nemá zmysel riešiť.

Ak by si z nejakého dôvodu potreboval aj cestu k executable files, tak ich nájdeš pod Microsoft > Windows > CurrentVersion > App Paths > (názov .exe)

Nahoru Odpovědět 17. března 22:20
if (this.motto == "") { throw new NotImplementedException(); }
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.