Q&A

  • findwindow에서요~~
안녕하세요~~



엑셀을 열려구 합니다..

다음과 같은 방법으로..



use절에 ComObj, OleServer 포함시켰구요~~



procedure excel;

var

lh_handle : THandle;

ExcelAppl : variant;



begin

//EXCEL의 CLASSNAME : XLMAIN

//현재 EXCEL이 실행되어있는지 check

lh_handle := FindWindow( 'XLMAIN', nil );



if lh_handle <> 0 then

ExcelAppl := GetActiveOLEObject('Excel.Application')

else

begin

try

ExcelAppl := CreateOLEObject ( 'Excel.Application') ;

except

Application.MessageBox ( '엑셀을 열 수 없습니다' + chr(13) +

'엑셀이 설치되어있는지 확인하십시요' , '알림' , MB_OK ) ;

end;

end;



//Workbook Add

ExcelAppl.Workbooks.add;



//Excel을 보이게함

ExcelAppl.Visible := True ;

SetForegroundWindow( lh_handle );

end;



근데요~~

이것이 하나의 폼에서 버튼하나 두고 실행시키면 아주 자~알되요~~

근데.. excel이란 procedure를 다른 폼에 두고 uses해서 하면 handle값이 항상 0으로 떨어져 엑셀이 계속 create되거든요~~

음..

제말 말을 넘 복잡하게 했나요~~?

A form의 버튼을 눌렸을 경우 B form에 있는 excel을 부르면 findwindow해서 가져온 핸들값이 항상 0이라는 것이지요~~

잉~~

고수님들의 멋진 말씀 부탁드립니다..



1  COMMENTS
  • Profile
    김영대 2000.01.25 20:24
    김지현 wrote:

    > 안녕하세요~~

    >

    > 엑셀을 열려구 합니다..

    > 다음과 같은 방법으로..

    >

    > use절에 ComObj, OleServer 포함시켰구요~~

    >

    > procedure excel;

    > var

    > lh_handle : THandle;

    > ExcelAppl : variant;

    >

    > begin

    > //EXCEL의 CLASSNAME : XLMAIN

    > //현재 EXCEL이 실행되어있는지 check

    > lh_handle := FindWindow( 'XLMAIN', nil );

    >

    > if lh_handle <> 0 then

    > ExcelAppl := GetActiveOLEObject('Excel.Application')

    > else

    > begin

    > try

    > ExcelAppl := CreateOLEObject ( 'Excel.Application') ;

    > except

    > Application.MessageBox ( '엑셀을 열 수 없습니다' + chr(13) +

    > '엑셀이 설치되어있는지 확인하십시요' , '알림' , MB_OK ) ;

    > end;

    > end;

    >

    > //Workbook Add

    > ExcelAppl.Workbooks.add;

    >

    > //Excel을 보이게함

    > ExcelAppl.Visible := True ;

    > SetForegroundWindow( lh_handle );

    > end;

    >

    > 근데요~~

    > 이것이 하나의 폼에서 버튼하나 두고 실행시키면 아주 자~알되요~~

    > 근데.. excel이란 procedure를 다른 폼에 두고 uses해서 하면 handle값이 항상 0으로 떨어져 엑셀이 계속 create되거든요~~

    > 음..

    > 제말 말을 넘 복잡하게 했나요~~?

    > A form의 버튼을 눌렸을 경우 B form에 있는 excel을 부르면 findwindow해서 가져온 핸들값이 항상 0이라는 것이지요~~

    > 잉~~

    > 고수님들의 멋진 말씀 부탁드립니다..



    전 EXCEL의 instance를 검사를 아래와 같이 했습니다



    try

    FExcel := GetActiveOLEObject('Excel.Application'); {기존의 instance 인터페이스를 받는다}

    if not VarIsEmpty(FExcel) then

    FExcelCreated := True;

    except

    FExcelCreated := False;

    end;



    완전한 소스는 제 홈페이지(http://myhome.shinbiro.com/~cozykyd/index.htm)의

    "공개 프로그램 소스 "에서

    "Query한 결과를 MS-EXCEL 로 보내는 콤포넌트" 를 참고해 보세요