Изменение настроек в Excel
От: CkuB  
Дата: 01.08.06 13:08
Оценка:
Нужно поменять одну из настоек в 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,
            &param,
            &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,
            &param,
            &varResult,
            NULL,
            NULL);
        pIDispApp->Release();
        pIDispApp = NULL;
        if (FAILED(hr))...


Но... этот способ не меняет настоек в УЖЕ ОТКРЫТОМ приложении Excel. Возможно есть какой-то способ подключится к открытому Екселю?
Re: Изменение настроек в Excel
От: CkuB  
Дата: 02.08.06 08:33
Оценка:
Уже сам разобрался, вместо CoCreateInstance надо использовать GetActiveObject.
Но тут есть одно но: см. PRB: GetObject or GetActiveObject Cannot Find a Running Office Application <a target='_blank' class='m' href='http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q238610'>Q238610</a>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.