с использованием OLE CreateOLEObject ('Excel.Application'))
вы можете получить установленные версии Excel, используя то же место в реестре, что и эта функция.
По сути, вы должны клонировать большую часть кода реестра этой функции.
Вы можете следить за вызовом этой функции с помощью таких инструментов, как Microsoft Process Monitor
, чтобы увидеть, как Windows выглядит для установленного Excel, а затем сделать это точно так же.
Вы должны открыть реестр на HKEY_CLASSES_ROOT\
и перечислить все ветви, чье имя начинается с «Excel.Application.»
Например, на этой моей рабочей станции у меня установлен только Excel 2013, и это соответствует HKEY_CLASSES_ROOT \ Excel.Application.15
Но на моей другой рабочей станции у меня установлены Excel 2003 и Excel 2010, и я тестирую различные реализации XLSX на этих двух, поэтому у меня есть два ключа реестра.
HKEY_CLASSES_ROOT \ Excel.Application.12
HKEY_CLASSES_ROOT \ Excel.Application.14
Итак, вы должны перечислить все эти ветви с этим именем, точкой и номером.
Примечание: ключ HKEY_CLASSES_ROOT \ Excel.Application \ CurVer будет иметь имя «по умолчанию» Excel, но то, что означает «по умолчанию», неоднозначно, если установлено несколько Excels. Вы можете принять это значение по умолчанию, если вам это безразлично, или вы можете сами решить, что выбрать, например, хотите ли вы максимальную версию Excel или минимальную или что-то в этом роде.
Затем, когда для каждой конкретной ветви Excel вы должны прочитать ключ по умолчанию его подсети CLSID.
Например, HKEY_CLASSES_ROOT\Excel.Application.15\CLSID
имеет ключ с нулевым именем, равный
{00024500-0000-0000-C000-000000000046}
- извлечь этот индекс в строковую переменную.
Затем выполните второй поиск - перейдите в ветку с именем вроде HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer
(используйте извлеченный индекс)
Если такая ветвь существует - извлеките значение «ключ по умолчанию» с нулевым именем, чтобы получить что-то вроде C:\PROGRA~1\MICROS~1\Office15\EXCEL.EXE /automation
Последний результат - командная строка. Он начинается с имени файла (в этом примере не заключенного в кавычки, но может быть в кавычках) и сопровождается необязательной командной строкой.
Вам не нужна командная строка, поэтому вы должны извлекать начальный командир, в кавычках или нет.
Затем вы должны проверить, существует ли такой exe-файл. Если это произойдет - вы можете запустить его, если нет - проверьте реестр на наличие других версий Excel.