Pregunta

Microsoft ha roto recientemente nuestra desde hace mucho tiempo (y oficialmente recomendado por ellos) código para leer la versión de Excel y su nivel actual de seguridad omacro.

Lo que solía trabajo:

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

(me entretuve siempre que el nivel de seguridad fue durante años en una entrada del registro insegura ...)

En Office 2010, los archivos .xls ahora se asocia con "“Microsoft Application Virtualization DDE Launcher ", o sftdde.exe. El número de versión de este exe no es, obviamente, la versión de Excel.

Mi pregunta:

Aparte de hecho el lanzamiento de Excel y consulta por versión y seguridad Nivel (mediante OLE CreateOleObject ( 'Excel.Application')), ¿existe un limpio, más rápido, o de manera más fiable para hacer esto que funcionaría con todas las versiones a partir de Excel 2003?

¿Fue útil?

Solución

Uso

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;

para obtener el nombre de archivo completo del archivo excel.exe. A continuación, utilice GetFileVersionInfo como de costumbre.

Por lo que yo sé, este enfoque siempre funciona.

Otros consejos

  

usando OLE CreateOleObject ( 'Excel.Application'))

que puede instalarse versiones de Excel utilizando el mismo lugar del registro, que esta función usos. Básicamente, usted tiene que clonar una gran parte de ese código de registro de la función. Puede espiar a que la función de llamada por herramientas como Microsoft Process Monitor también ver exactamente cómo lo hace aspecto de Windows para Excel instalado -. Y luego hacerlo de la misma manera

Hay que registro abierto en HKEY_CLASSES_ROOT\ y enumerar todas las ramas, cuyo nombre empieza con "Excel.Application."

Por ejemplo en este mi estación de trabajo sólo he instalado Excel 2013, y que corresponde a HKEY_CLASSES_ROOT \ Excel.Application.15

Pero en mi otra estación de trabajo que tiene Excel 2003 y Excel 2010 instalado, probando diferentes implementaciones XLSX en los dos, así que tengo dos claves de registro.

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

Por lo tanto, hay que enumerar todas aquellas ramas con ese nombre, punto, y el número.

Nota: la clave HKEY_CLASSES_ROOT \ Excel.Application \ CurVer tendría nombre de "default" de Excel, pero ¿qué significa "por defecto" es ambigua cuando se instalan varios sobresale. Usted puede tomar este valor por defecto, si no le importa, o puede decidir sobre su propia idea de cuál elegir, como si desea que el máximo o mínimo, la versión Excel o algo así.

Luego, cuando por cada rama específica de Excel debe leer el clave predeterminada de su CLSID sub-rama. Al igual que HKEY_CLASSES_ROOT\Excel.Application.15\CLSID posee una cantidad igual a cero llamado clave {00024500-0000-0000-C000-000000000046} -. ir a buscar que el índice de variable de cadena

A continuación, hacer una segunda búsqueda - entrar en una rama llamada como HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer (utiliza el índice descabellada)

Si existe esa rama - Obtiene el valor "clave por defecto" nil-nombrado para obtener algo así como C:\PROGRA~1\MICROS~1\Office15\EXCEL.EXE /automation

El último resultado es la línea de comandos. Se inicia con un nombre de archivo (no citado en este ejemplo, pero puede estar en-comillas) y es seguido por línea de comandos opcional. No necesita línea de comandos, así que hay que extraer commanlind inicial, citado o no.

A continuación, usted tiene que comprobar si existe un archivo de este tipo exe. Si lo hace - es posible poner en marcha, si no -. Compruebe el registro para otras versiones de Excel

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top