Коля |
Отправлено: 13.03.2006, 12:09 |
|
Не зарегистрирован
|
Работаю с Excel как показано в уроках, с этого сайта. Вообщем проблема в след.: если тыркаем по кнопочке, где у меня идёт работа с екселем первый раз, то окно екселя показывается, со всеми данными, какие я туда экспортировал всё ок. Но, если я не закрывая Excel, нажму по кнопке ещё раз, то экспорт происходит, окно не появлется! Приходится тыркать в панель задач, чтобы открыть окно екселя... но мне так не канает, мне нужно чтобы он тоже сразу открывался...
открытие делаю так:
до обработки:
CODE |
OleObject.OlePropertySet("Visible", false);
|
после обработки:
CODE |
OleObject.OlePropertySet("Visible", true);
OleObject.Clear();
|
могет.... там какая нить процедура типа "show", чтобы показать excel, или чёль |
|
AVC |
Отправлено: 14.03.2006, 08:54 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Обычно хватает именно этого
MSExcel.OlePropertySet("Visible", true / false);
может применяете не к тому объекту? |
|
Коля |
Отправлено: 15.03.2006, 07:46 |
|
Не зарегистрирован
|
Да у меня он один... ошибаться то негде
Вообщем, спас тока вот такой код, может это громоздко и не совсем корректно зато воркат:
CODE |
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
if (lParam)
{
TWindowSearchInfo* pSI = static_cast <TWindowSearchInfo*>((void*)lParam);
DWORD dwPID;
char szBufferCaption[100];
GetWindowThreadProcessId(hwnd, &dwPID);
GetWindowText(hwnd, szBufferCaption, sizeof(szBufferCaption));
if (dwPID == pSI->dwPID && !strcmp(szBufferCaption, pSI->strCaption.c_str()))
pSI->hWnd = hwnd;
}
return TRUE;
}
//---------------------------------------------------------------------------
void __fastcall showExcelWindow(String strCaption)
{
HWND hSearchWnd = NULL;
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
do
{
if (UpperCase(pe32.szExeFile) == "EXCEL.EXE")
{
TWindowSearchInfo strSI;
strSI.dwPID = pe32.th32ProcessID;
strSI.strCaption = strCaption;
strSI.hWnd = 0;
EnumWindows((WNDENUMPROC )EnumWndProc, (int)&strSI);
if (strSI.hWnd > 0)
{
hSearchWnd = strSI.hWnd;
break;
}
}
}
while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
if (hSearchWnd)
ShowWindow(hSearchWnd, SW_SHOWMAXIMIZED);
}
|
после того, как данные экспортировались проюзываю
CODE |
showExcelWindow(String("Microsoft Excel — " + OleObject.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Name")));
OleObject.OlePropertySet("Visible", true);
|
Может всё что я выложил лишнее... но тем не менее, у меня встала такая трабла, авось ещё у каво нить будет... |
|
AVC |
Отправлено: 15.03.2006, 09:30 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Выгрузка листа из Excel. Посмотрите — может найдете что полезное. Функция достаточно автономна. Этот кусок понадобился для использования в независимом проекте (без подключения моих библиотек). Пользуюсь оригиналом уже не один год — проблем не возникало.
Основное по этому вопросу
CODE |
Variant MSExcel = Null;
Variant XLWBooks = Null;
Variant XLWBook = Null;
try { MSExcel = Variant::GetActiveObject("Excel.Application"); }
catch (...) { MSExcel = Null; }
if (MSExcel.IsNull())
{ try { MSExcel = Variant::CreateObject("Excel.Application"); }
catch (Exception &xcp)
{ MSExcel = Null;
throw Exception("Не могу запустить приложение MSExcel\n" + xcp.Message);
}
}
try { // Workbooks
XLWBooks = MSExcel.OlePropertyGet("Workbooks");
try { XLWBook = XLWBooks.OleFunction("Open", xfile); }
catch (...) { XLWBook = Null; }
if (XLWBook.IsNull()) // Попытка создать новый сервер
{ try
{ MSExcel = Variant::CreateObject ("Excel.Application");
// MSExcel.OlePropertySet ("Visible", false);
XLWBooks = MSExcel.OlePropertyGet ("Workbooks");
XLWBook = XLWBooks.OleFunction ("Open", xfile);
}
catch (Exception &xcp)
{ MSExcel = Null;
throw Exception (AnsiString("") +
"Не могу запустить приложение MSExcel.\n" +
"Если оно у Вас уже запущено закройте его и повторите попытку."
);
}
} // new Excel.Application
} // try Workbooks
|
|
|
|