|
안녕하세요 엑셀을 이용해서 그리드의 내용을 출력하는 코딩을 했습니다. 수행은 잘되는데 호출한 프로그램의 프로세스가 죽지 않네요 무슨 문제가 있는건지 알고 싶습니다.
참고로 호출하는 프로세스는 DLL로 작성했답니다. 폼이 호출될때 그리드마다 팝업메뉴를 동적으로 생성하고 거기에 사용자정의 이벤트를 걸어 엑셀을 저장하게 하는 DLL을 만들어 사용하는데 엑셀을 가동하고 저장까지 잘한다음 엑셀을 잘 죽이는것까지는 성공여.
그런데 호출한 녀석의 프로세스가 안죽고 지속되는게 문제임다.
혹시 아시는 분 계시면 도움을 부탁드립니다.
*참고로 아래쪽에 저장하는 구문을 삭제하면 프로세스도 죽더군요. 저장을 하면 뭔가 내부적으로 변화가 생기는건지 쩝.
<호출하는 프로세스>
TKFSExcelControl * xlControl = new TKFSExcelControl();
xlControl->fnExcelExport((TAdvStringGrid *)pComponent, ((TAdvStringGrid *)pComponent)->Hint);
delete xlControl;
<Excel처리 Class>
TKFSExcelControl::TKFSExcelControl()
{
ExcelApplication1=new TExcelApplication(0);
ExcelWorkbook1=new TExcelWorkbook(0);
ExcelWorksheet1=new TExcelWorksheet(0);
}
TKFSExcelControl::~TKFSExcelControl()
{
if(ExcelApplication1)
{
if(ExcelWorkbook1)
{
if(ExcelWorksheet1)
{
ExcelWorksheet1->Disconnect();
delete ExcelWorksheet1;
}
ExcelWorkbook1->Disconnect();
delete ExcelWorkbook1;
}
ExcelApplication1->Disconnect();
ExcelApplication1->Quit();
delete ExcelApplication1;
}
}
void __fastcall TKFSExcelControl::fnExcelExport(TAdvStringGrid *grd, AnsiString SheetName)
{
if(!ExcelApplication1) {
ShowMessage("Excel을 구동할 수 없습니다");
return;
}
ExcelApplication1->ConnectKind = ckNewInstance;
ExcelApplication1->Connect();
ExcelApplication1->set_Visible(0,true);
ExcelWorkbook1->ConnectKind = ckAttachToInterface;
ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add());
ExcelWorksheet1->ConnectKind = ckAttachToInterface;
ExcelWorksheet1->ConnectTo(ExcelApplication1->Worksheets->get_Item((TVariant)1));
ExcelWorksheet1->set_Name(WideString(SheetName));
ExcelWorksheet1->Activate();
for (int i=1; i < grd->RowCount+1; i++)
for (int j = 1; j < grd->ColCount+1; j++)
{
ExcelWorksheet1->Cells->set_Item((TVariant)i,(TVariant)j,(TVariant)grd->Cells[j-1][i-1].c_str() );
}
AnsiString fnm = "d:\\"+SheetName+".xls";
ExcelWorksheet1->SaveAs(WideString(fnm),
TNoParam(), TNoParam(),
TNoParam(), TNoParam(),
TNoParam(), TNoParam(),
TNoParam(), TNoParam(), TDefLCID());
}
|