Frage

Microsoft hat unsere langjährige vor kurzem gebrochen (und offiziell von ihnen empfohlen) Code, um die Version von Excel und seiner aktuellen omacro Sicherheitsstufe zu lesen.

Was zur Arbeit verwendet:

// 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'

(ich war immer amüsiert, dass die Sicherheitsstufe für Jahre in einem unsicheren Registrierungseintrag ist ...)

In Office 2010, .xls-Dateien werden nun mit „„Microsoft Application Virtualization DDE Launcher“oder sftdde.exe verbunden. Die Versionsnummer dieser exe ist offensichtlich nicht die Version von Excel.

Meine Frage:

Anders als Excel tatsächlich startet und Abfrage es für Version und Sicherheit Ebene (mit OLE CreateOleObject ( 'Excel.Application')), gibt es eine saubere, schneller, oder zuverlässige Art und Weise, dies zu tun, die mit allen Versionen ab Excel 2003 funktionieren würden?

War es hilfreich?

Lösung

Mit

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;

die vollständigen Dateinamen der excel.exe-Datei zu erhalten. Dann GetFileVersionInfo wie gewohnt verwenden.

Soweit ich weiß, ist dieser Ansatz funktioniert immer.

Andere Tipps

  

mit OLE CreateOleObject ( 'Excel.Application'))

Sie können Excel-Versionen unter Verwendung des gleichen Registry-Orts erhalten installiert, dass diese Funktion verwendet. Grundsätzlich Sie einen großen Teil dieser Funktion Registrierungscode klonen müssen. Sie können auch auf diesem Funktionsaufruf auszuzuspionieren durch Tools wie Microsoft Process Monitor genau zu sehen, wie funktioniert Windows sucht installiert Excel -. Und dann ist es genau die gleiche Art und Weise zu tun,

Sie müssen offene Registrierung auf HKEY_CLASSES_ROOT\ und listen alle die Zweige, deren Name beginnt mit „Excel.Application.“

Zum Beispiel an diesem meinem Arbeitsplatz ich nur habe Excel 2013 installiert, und das entspricht HKEY_CLASSES_ROOT \ Excel.Application.15

Aber auf meinem anderen Arbeitsplatz habe ich Excel 2003 und Excel 2010 installiert ist, Testen verschiedener XLSX-Implementierungen in diesen beiden, so dass ich zwei Registrierungsschlüssel haben.

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

So, müssen Sie mit diesem Namen alle diese Zweige aufzählen, Dot und Nummer.

Hinweis: der Schlüssel HKEY_CLASSES_ROOT \ Excel.Application \ CurVer würde Namen „default“ Excel, aber was bedeutet „Verschulden“ ist nicht eindeutig, wenn mehrere Zeichnet installiert sind. Sie können von diesem Standardwert übernehmen, wenn Sie sich nicht, oder Sie können auf Ihre eigene Idee entscheiden, was zu wählen, wie wenn Sie die maximale Excel-Version oder Minimum oder etwas wollen.

Dann, wenn für jeden spezifischen Excel-Zweig sollten Sie die Standardschlüssel lesen seinen CLSID Unterzweiges. Wie HKEY_CLASSES_ROOT\Excel.Application.15\CLSID hat nil genannten Schlüssel gleich {00024500-0000-0000-C000-000000000046} -. holt diesen Index zu String-Variable

Dann wird eine zweite Suche tun - gehen in einen Zweig wie HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer genannt (verwenden Sie den abgerufenen Index)

Wenn dieser Zweig existiert - holt den Null-Namen „Standardschlüssel“ Wert etwas wie C:\PROGRA~1\MICROS~1\Office15\EXCEL.EXE /automation zu bekommen

Das letzte Ergebnis ist die Kommandozeile. Es beginnt mit einem Dateinamen (in diesem Beispiel nicht zitiert, kann aber in Anführungszeichen sein) und wird durch optionale Befehlszeile gefolgt. Sie haben keine Befehlszeile benötigen, so dass Sie anfänglichen commanlind extrahieren müssen, notiert oder nicht.

Dann müssen Sie prüfen, ob eine solche exe-Datei vorhanden ist. Ist dies der Fall - man kann es starten, wenn nicht -. Die Registrierung für andere Excel-Versionen überprüfen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top