Domanda

Microsoft ha recentemente rotto la nostra lunga data (e ufficialmente consigliato da loro) il codice per leggere la versione del suo attuale livello di sicurezza omacro Excel e.

Quello che al lavoro:

// Get the program associated with workbooks, e.g. "C:\Program Files\...\Excel.exe"
SHELLAPI.FindExecutable( 'OurWorkbook.xls', ...) 

// Get the version of the .exe (from it's Properties...)
WINDOWS.GetFileVersionInfo()

// Use the version number to access the registry to determine the security level
// '...\software\microsoft\Office\' + VersionNumber + '.0\Excel\Security'

(mi ha sempre divertito che il livello di sicurezza è stato per anni in una voce di registro insicuro ...)

In Office 2010, i file .xls sono ora associati con "“Microsoft Application Virtualization DDE Launcher ", o sftdde.exe. Il numero di versione di questo exe non è ovviamente la versione di Excel.

La mia domanda:

Altro che in realtà lanciare Excel e l'esecuzione di query per version e sicurezza di livello (usando OLE CreateOleObject ( 'Excel.Application')), c'è un più pulito, più veloce, o un modo più affidabile per fare questo che funzionerebbe con tutte le versioni che iniziano con Excel 2003?

È stato utile?

Soluzione

Usa

function GetExcelPath: string;
begin
  result := '';
  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe', false) then
        result := ReadString('Path') + 'excel.exe';
    finally
      Free;
    end;
end;

per ottenere il nome del file completo del file Excel.exe. Quindi utilizzare GetFileVersionInfo come al solito.

Per quanto ne so, questo approccio sarà sempre lavoro.

Altri suggerimenti

  

utilizzando OLE CreateOleObject ( 'Excel.Application'))

si può ottenere installato le versioni di Excel utilizzando lo stesso luogo Registro di sistema, che questo utilizza la funzione. In pratica dovete clonare una gran parte di questo codice funzione Registro di sistema. Si può spiare quella chiamata di funzione da strumenti come Microsoft Process Monitor troppo vedere esattamente come fa aspetto di Windows per installare Excel -. E poi di farlo esattamente allo stesso modo

Devi registro aperto a HKEY_CLASSES_ROOT\ e enumerare tutti i rami, il cui nome inizia con "Excel.Application".

Per esempio in questo mio posto di lavoro ho solo Excel 2013 installato, e che corrisponde a HKEY_CLASSES_ROOT \ Excel.Application.15

Ma sul mio un'altra workstation ho Excel 2003 e Excel 2010 installati, testando diverse implementazioni XLSX a quei due, quindi ho due chiavi di registro.

HKEY_CLASSES_ROOT \ Excel.Application.12 HKEY_CLASSES_ROOT \ Excel.Application.14

Quindi, bisogna enumerare tutti quei rami con quel nome, Dot, e il numero.

Nota: HKEY_CLASSES_ROOT chiave \ Excel.Application \ CurVer avrebbe nome di "default" di Excel, ma cosa significa "default" è ambiguo quando sono installate diverse eccelle. Si può prendere quel valore di default, se non si cura, o si può decidere la propria idea di cosa scegliere, come se si desidera che la massima versione di Excel o minimo o qualcosa del genere.

Poi, quando per ogni specifico ramo Excel si dovrebbe leggere il chiave predefinita del suo CLSID ramo secondario. Come HKEY_CLASSES_ROOT\Excel.Application.15\CLSID ha nil nome in chiave pari a {00024500-0000-0000-C000-000000000046} -. del recupero indice variabile stringa

Poi fare una seconda ricerca - andare in un ramo di nome come HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer (utilizzare l'indice inverosimile)

Se quel ramo esiste - recuperare il valore "chiave di default" nil nome per ottenere qualcosa di simile C:\PROGRA~1\MICROS~1\Office15\EXCEL.EXE /automation

L'ultimo risultato è la linea di comando. Si inizia con un nome di file (non citato in questo esempio, ma può essere in-virgolette) ed è seguito da riga di comando opzionale. Non è necessario da riga di comando, quindi bisogna estrarre commanlind iniziale, quotate o meno.

Poi si deve verificare se esiste un tale file exe. Se lo fa - si può lanciarlo, se non -. Controllare il Registro di sistema per le altre versioni di Excel

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top