Q&A

  • 현재 시스템에 Excel이 실행되어있는지 알고 싶습니다.


Excel로 저장하기 전에 CreateOLEObject를 이용하여 Excel 인스턴스를 생성하는데..

이미 시스템에 Excel이 실행중이라면. WorkBook만 Add 하고 싶습니다..



방법이 없을까요??



여러개에 Query를 하나의 Excel파일에 저장하려고 합니다.

기존에 팁에 있는 방법으로 하면 너무많은 Excel이 실행되어서 메모리가 넘치더군요.



도움 바랍니다.

1  COMMENTS
  • Profile
    김영대 1999.10.14 03:51
    제 홈페이지(http://myhome.shinbiro.com/~cozykyd/index.htm)에 보시면

    "공개 프로그램 소스" 에 있는

    "Query한 결과를 MS-EXCEL 로 보내는 콤포넌트" 의 일부 입니다



    GetActiveOLEObject() 가 말씀하신 현재 생성되어 있는

    EXCEL의 instance 를 알아내는 거고요

    현재 WorkBook 은 FWorkBook := FExcel.ActiveWorkBook;

    현재 WorkSheet 은 FWorkSheet := FWorkBook.ActiveSheet;

    하시면 됩니다



    { EXCEL instance 생성 }

    procedure TQryExcel.CreateExcelInstance;

    var

    FExcel: Variant;

    FWorkBook: Variant;

    FWorkSheet: Variant;

    FExcelCreated: Boolean;

    begin

    FExcelCreated := False;



    try

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

    if not VarIsEmpty(FExcel) then

    FExcelCreated := True;

    except

    FExcelCreated := False;

    end;

    end;



    if FExcelCreated = False then

    begin

    try

    {CreateOLEObject('Excel.Application') 줄이 실행되면 EXCEL이 background 에서

    시작되기 때문에 사용자에게 보이지 않는다.(automation 이므로)

    보통 EXCEL 객체의 엔진만 사용하는 경우라면 이렇게 생성한 객체를 직접 사용해서

    원하는 작업을 하면 된다. EXCEL로 자료를 전송할때는 Visible 프로퍼티를 False 로 한 후

    전송 후 사용자에게 보여주도록 Visible 프로퍼티를 True 로 하는것이 속도 증진에 좋다.

    그리고 FExcel := CreateOLEObject('Excel.Application') 의 의미는 Excel 의 Application

    이라는 COM 객체에 대한 인스턴스를 생성하고, 이 인스턴스를 가리키는 IDispatch 인터페이스

    를 FExcel 이라는 가변형 변수에 대입하는 것이다.}

    FExcel := CreateOLEObject('Excel.Application'); {instance 생성 후 인터페이스를 받는다, 50여개의 다른 객체도 있음}

    FExcelCreated := True;

    except

    FExcelCreated := False; {생성여부는 IsCreated 함수로 알 수 있다}

    end;

    end;



    if FExcelCreated = True then

    begin

    FWorkBook := FExcel.WorkBooks.Add; {FExcel 객체에 WorkBook 객체 생성, Add = Create 기능}

    FWorkSheet := FWorkBook.WorkSheets.Add; {FWorkBook 객체에 WorkSheet 객체 생성, Add = Create 기능}

    {Application 객체 = Excel 자신을 가리킨다

    WorkBook 객체 = 실제 데이터 파일을 포함하고 있다. 즉 여러개의 Sheet 를 포함하고 있는 Excel의 .XLS 파일이

    WorkBook 객체인 것이다. 이 객체에는 Open, NewSheet 와 같은 Excel 파일 수준에서 일어나는

    이벤트 핸들러와 프로퍼티, 메소드 등을 제공한다

    WorkSheet 객체 = Sheet 하나에 대한 객체로 Sheet 객체는 Sheet 에서 일어날 수 있는 모든 이벤트와 프로퍼티, 메소드

    Chart 객체 = Excel Chart 객체

    등을 제공한다

    }

    FExcel.DisplayAlerts := False; {Excel 종료시 저장 여부를 물어보지 않도록 한다}

    end;

    end;