Excel로 저장하기 전에 CreateOLEObject를 이용하여 Excel 인스턴스를 생성하는데.. 이미 시스템에 Excel이 실행중이라면. WorkBook만 Add 하고 싶습니다.. 방법이 없을까요?? 여러개에 Query를 하나의 Excel파일에 저장하려고 합니다. 기...
김영대
•
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;