엑셀 어플리케이션을 CreateOLEObject로 생성후 DBGrid의 내용을 Excel로 옮겼습니다
문제는 생성된 엑셀 어플리케이션을 SetParent로 현재 MDI의 Child로 설정하면
Excel의 Close Box, Open, ...의 Excel Fucntion이 수행되지 않는다는 것입니다
Event 처리의 문제라도 생각되는데 어떻게 해야 정상적으로 처리할 수 있는 건가요?
여러 고수님들의 한수 지도 부탁합니다
아래는 Soruce입니다
바쁘시겠지만 한번 봐주세요
try
ExcelApp := CreateOLEObject('Excel.Application') ;
except
Showmessage('Can''t run Excel' + chr(13) + 'please check first');
Exit;
end;
ExcelApp.WorkBooks.Add;
ADOQuery_CustList.First;
for i := 1 to ADOQuery_CustList.RecordCount do
for j := 1 to DBGrid_CustList.FieldCount do
ExcelApp.Cells[i+1,j].Value := ADOQuery_CustList.Fields[j-1].AsString;
wnd := FindWindow( 'XLMAIN', nil );
Windows.SetParent( wnd, FindWindow('TMainForm', nil));
SetWindowPos( wnd, 0, 0, 0, clientwidth, clientheight, SWP_NOZORDER or
SWP_SHOWWINDOW );
ExcelApp.Visible := True ;
end;
> 엑셀 어플리케이션을 CreateOLEObject로 생성후 DBGrid의 내용을 Excel로 옮겼습니다
> 문제는 생성된 엑셀 어플리케이션을 SetParent로 현재 MDI의 Child로 설정하면
> Excel의 Close Box, Open, ...의 Excel Fucntion이 수행되지 않는다는 것입니다
>
> Event 처리의 문제라도 생각되는데 어떻게 해야 정상적으로 처리할 수 있는 건가요?
> 여러 고수님들의 한수 지도 부탁합니다
>
> 아래는 Soruce입니다
> 바쁘시겠지만 한번 봐주세요
>
>
> try
> ExcelApp := CreateOLEObject('Excel.Application') ;
> except
> Showmessage('Can''t run Excel' + chr(13) + 'please check first');
> Exit;
> end;
> ExcelApp.WorkBooks.Add;
> ADOQuery_CustList.First;
> for i := 1 to ADOQuery_CustList.RecordCount do
> for j := 1 to DBGrid_CustList.FieldCount do
> ExcelApp.Cells[i+1,j].Value := ADOQuery_CustList.Fields[j-1].AsString;
>
> wnd := FindWindow( 'XLMAIN', nil );
>
> Windows.SetParent( wnd, FindWindow('TMainForm', nil));
엑셀을 맨 앞으로 보내는 일만 하니 되더군요....반나절 공들여서
SetForegroundWindow(wnd);
> SetWindowPos( wnd, 0, 0, 0, clientwidth, clientheight, SWP_NOZORDER or
> SWP_SHOWWINDOW );
> ExcelApp.Visible := True ;
> end;
>