폼을 하나 만들고 판넬을 하나 얹었습니다.
판넬 위에 엑셀을 불러 앉힌 다음 이런저런 작업을 하고 난 뒤
폼을 닫으면 엑셀이 그냥 살아있습니다.
질답란이며 자료란, 강좌란 등을 다 뒤져가며 참고로 이리저리 고쳐보았는 데
도무지 답이 안나옵니다.
좀 도와주십시오.
소스입니다.
////////////////
procedure TExcel_Frm.SpeedButton56Click(Sender: TObject);
var
c_Day : String;
XLAPP, WBK, WS : Varient;
begin
c_Day := Copy(DateEdit1.Text, 1, 4) + Copy(DateEdit1.Text, 6, 2) + Copy(DateEdit1.Text, 9, 2);
DateQuery.DisableControls;
Try
with DateQuery do begin
Close;
DateQuery.SQL.Clear;
DateQuery.SQL.ADD('Select * From F1Data');
DateQuery.SQL.ADD('Where Fdate = "' + c_Day + '"');
DateQuery.SQL.ADD('Order by Fcode');
DateQuery.Open;
Open;
end;
finally
DateQuery.EnableControls;
end;
if OpenDLG.Execute then begin
if DateQuery.RecordCount > 0 then begin
try
XLAPP := CreateOLEObject('Excel.Application');
except
Application.MessageBox ( '엑셀을 열 수 없습니다' + chr(13) +
'엑셀이 설치되어있는지 확인하십시요' , '알림' , MB_OK ) ;
Result := 0;
Exit;
end;
Try
XLAPP.Visible := True;
XLAPP.DisplayAlerts := False;
WBK := XLAPP.WorkBooks.Open(OpenDLG.FileName);
WBK := XLAPP.WorkBooks.item[1];
WS := WBK.Worksheets.Item['d' + IntToStr(StrToInt(Copy(DateEdit1.Text, 9, 2)))];
WS.Activate;
///// 판넬 위에 얹히는 부분. 이 부분을 없애면 엑셀이 독자적으로 실행. 반드시 판넬 위에서 실행되어야 함
Wnd := findwindow('XLMain', nil );
Windows.SetParent(wnd, Panel1.Handle); //Panel1.Handle
SetWindowPos( wnd, Panel1.Handle , 0, -26, Panel1.clientwidth, Panel1.clientheight , SWP_NOZORDER or sWP_SHOWWINDOW );
...... 실제 작업을 하는 곳
//XLAPP.WorkBooks.Close; // 이곳을 살리면 엑셀이 죽어버림
//XLAPP.quit;
//XLAPP := unassigned;
Except
on err : exception do begin
XLAPP.WorkBooks.Close;
XLAPP.quit;
XLAPP := unassigned;
ShowMessage('작업이 취소되었습니다. Data확인요망-'+err.message);
end;
end;
end
else begin
Application.MessageBox ( 어쩌구저쩌구 + chr(13) +
'확인해주십시오' , '알림' , MB_OK ) ;
end;
end;
end;
엑셀은 다뤄본지 오래되서...
XLAPP.Quit;
하시면 될겁니다.
^^ 항상 즐코하세요...