Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Что-то этот очевидный кусок кода не работает... 21.05.01 00:44
Автор: ARB Статус: Незарегистрированный пользователь
|
Импортируем классы Application, Range, Workbooks, Worksheets для работы с Excel из библиотеки типов xl5en32.olb. Далее приводится кусок кода, который приводится абсолютно одинаково во всех источниках (лишнее я выбросил).
void CEx24dView::OnExceloleLoad()
{ // if Excel is already running, attach to it, otherwise start it
LPDISPATCH pDisp;
LPUNKNOWN pUnk;
CLSID clsid;
TRACE("Entering CEx24dView::OnExcelLoad\n");
BeginWaitCursor();
::CLSIDFromProgID(L"Excel.Application", &clsid); // from registry
if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK) {
TRACE("attaching\n");
VERIFY(pUnk->QueryInterface(IID_IDispatch,
(void**) &pDisp) == S_OK);
m_app.AttachDispatch(pDisp);
pUnk->Release();
}
else {
TRACE("creating\n");
VERIFY(m_app.CreateDispatch("Excel.Application") == TRUE);
}
EndWaitCursor();
}
К этой функции замечаний нет и выполняется она корректно. Excel загружается в память.
void CEx24dView::OnExceloleExecute()
{
LPDISPATCH pRange, pWorkbooks;
CWnd* pWnd = CWnd::FindWindow("XLMAIN", NULL);
if (pWnd != NULL) {
TRACE("Excel window found\n");
pWnd->ShowWindow(SW_SHOWNORMAL);
pWnd->UpdateWindow();
pWnd->BringWindowToTop();
}
pWorkbook = *((m_app.GetActiveWorkbook()).ppdispVal);
const CString m_str("blaha.xls");
Workbook m_workbook(pWorkbook);
m_workbook.Close(COleVariant((short)0), COleVariant(m_str) , COleVariant((short)0) ); ошибка в этой функции
}
Порядок действий такой: я сам запускаю Excel с созданной Workbook (указатель pWorkbook получается корректно). Почему эта открытая Workbook не закрывается?
Помогите pls, если знаете в чем тут дело
Thanks
|
|
|