BF Summer sales
Pouze tento týden sleva až 80 % na HTML & CSS a JavaScript
80 % bodů zdarma na online výuku díky naší Letní akci!

Diskuze: Jak zjistit, zda je nainstalovaný Office?

Aktivity (4)
Avatar
Martin Krejčí:17.3.2019 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.3.2019 14:25
Avatar
JerryM
Člen
Avatar
Odpovídá na Martin Krejčí
JerryM:17.3.2019 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.3.2019 14:46
Avatar
Odpovídá na JerryM
Martin Krejčí:17.3.2019 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.3.2019 15:43
Avatar
JerryM
Člen
Avatar
JerryM:17.3.2019 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.3.2019 17:44
Avatar
Odpovídá na JerryM
Martin Krejčí:17.3.2019 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.3.2019 18:33
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Martin Krejčí
hanpari:17.3.2019 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.3.2019 21:26
Avatar
Martin Petrovaj
Redaktor
Avatar
Martin Petrovaj:17.3.2019 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.3.2019 22:00
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Martin Krejčí:17.3.2019 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.3.2019 22:07
Avatar
Martin Petrovaj
Redaktor
Avatar
Odpovídá na Martin Krejčí
Martin Petrovaj:17.3.2019 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.3.2019 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.