Нужно поменять одну из настоек в Excel. Я это реализую так:
LPOLESTR szAppId = OLESTR("Excel.Application");
hr = CLSIDFromProgID(szAppId, &clsid);
if (FAILED(hr))...
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pIDispApp);
if (FAILED(hr))...
// получаем DISPID свойства EnableAutoComplete
BSTR name = L"EnableAutoComplete";
hr = pIDispApp->GetIDsOfNames(IID_NULL,
&name,
1,
GetUserDefaultLCID(),
&dispidEnableAutoComplite);
if (FAILED(hr))...
// получаем DISPID метода Quit
name = L"Quit";
hr = pIDispApp->GetIDsOfNames(IID_NULL,
&name,
1,
GetUserDefaultLCID(),
&dispidQuit);
if (FAILED(hr))...
// устанавливаем свйство EnableAutoComplite в FALSE
var.vt = VT_BOOL;
var.boolVal = VARIANT_FALSE;
param.cArgs = 1;
param.rgvarg = &var;
param.cNamedArgs = 1;
param.rgdispidNamedArgs = &dispidNamed;
hr = pIDispApp->Invoke(dispidEnableAutoComplite,
IID_NULL,
GetUserDefaultLCID(),
DISPATCH_PROPERTYPUT,
¶m,
&varResult,
NULL,
NULL);
if (FAILED(hr))...
// вызываем Quit
param.cArgs = 0;
param.rgvarg = NULL;
param.cNamedArgs = 0;
param.rgdispidNamedArgs = NULL;
hr = pIDispApp->Invoke(dispidQuit,
IID_NULL,
GetUserDefaultLCID(),
DISPATCH_METHOD,
¶m,
&varResult,
NULL,
NULL);
pIDispApp->Release();
pIDispApp = NULL;
if (FAILED(hr))...
Но... этот способ не меняет настоек в УЖЕ ОТКРЫТОМ приложении Excel. Возможно есть какой-то способ подключится к открытому Екселю?