using namespace Excel;
_ApplicationPtr excel("Excel.Application");
Определение наличия/весии MS Office
Заранее спасибо.
Word.Application, Excel.Application и т. п. для соответствующих приложений. Возможно, Office.Document (могу напутать с названием COM-класса), если требуется проверка наличия Офиса как такового. Внутри данных ключей хранится ссылка, какая версия из установленных является версией по умолчанию - одновременно может быть установлено несколько версий программ.
В WinAPI должна быть функция CLSIDFromProgID, возвращающая GUID класса, если сервер установлен, и код ошибки в противном случае. Возможно, где-то в группе с ней есть и функция получения версии(й) серверов.
По-любому, пользование API является более надежным способом, чем проверка значений ключа вручную. Не факт, что в очередной версии Винды они будут храниться тоже в HKEY_CLASSES_ROOT. Поэтому будем считать чтение MSDN домашним заданием. ;)
наверное путаешь с COM:
Код:
но, думаю, вылова exception`а при отсутствии офиса как такового мне хватит: выяснилось, что при компилляции под MSO97 код работает нормально и с боллее новыми версиями, а обратное, увы, не верно
Возник новый вопрос: какие файлы кроме:
MSO97.DLL
EXCEL8.OLB
VBEEXT1.OLB
нужны, чтобы корректно всё компилилось (нужен только Excel, так что MSWORD8.OLB и проч. не предлагать :) )
И вообще, можно ли выдрать из офиса все нужные библиотеки, чтобы сложить их вместе (на машине стоит нормальный оффис, а компилить всё из-под VMWare каждый раз не хочется)
может кому-нибудь будет интересно:
импортировать COM, использую файлы 97го офиса с установленным 2000 или выше не получается - в vbeext1.thl появляется ссылка на некий CommandBar (из офиса версии после 97го), из-за чего всё перестаёт компилиться. Однако с файлами MSO2000 такого глюка уже не наблюдается и получающийся код нормально работает под любым офисом >= 2000.
А как определить версию установленного офиса (и установлен ли?), желательно средствами WinAPI - вопрос всё-таки открытый...
Закрыто:
Код:
Excel::_ApplicationPtr excel("Excel.Application");
_bstr_t versionString = _bstr_t( excel->Version );
_bstr_t versionString = _bstr_t( excel->Version );