|
안녕하십니까?
다음과 같이 코딩하였습니다. 그런데...
엑셀이 메모리에서 사라지지 않아 낭패 입니다.
아마도 엑셀이 생성된 파일을 잡고 있는듯하여...
엑셀이 메모리에 남아 있을때 생성된 엑셀파일을 열려고 시도하면
엑셀도 먹통이 되어 버립니다.
아... 검색이 되지 않으니.. 정말로 답답하군요..
소스좀 봐 주시겠습니까?
C++빌더 4.0 이고요, 윈도우2000 입니다.
====================================================================
#include "comobj.hpp"
#include <utilcls.h>
위의 두 라인을 추가하고...
Variant Excel;
AnsiString FilePath ;
SaveDialog->Filter = "Excel files(*.xls)|*.XLS";
if ( SaveDialog->Execute() )
FilePath = SaveDialog->FileName ;
else
return;
try
{
Excel = CreateOleObject("Excel.Application");
}
catch(...)
{
ShowMessage("EXCEL이 설치되어 있지 않습니다. EXCEL을 먼저 설치해야 합니다.");
return;
}
try
{
Variant WorkBooks = Excel.OlePropertyGet("WorkBooks");
WorkBooks.OleFunction("Add");
Variant ActiveWorkBook = Excel.OlePropertyGet("ActiveWorkbook");
Variant WorkSheets = Excel.OlePropertyGet("Worksheets");
Variant WorkSheet = WorkSheets.OlePropertyGet("Item", 1);
WorkSheet.OleFunction("Activate");
//제목넣기
for (int iCol=0; iCol < MainQuery->Fields->Count ; iCol++)
{
Variant Range = WorkSheet.OlePropertyGet("Cells", 1, iCol+1); // Row=.Zeile / Col=Spalte
Range.OlePropertySet("Value", MainQuery->Fields->Fields[iCol]->DisplayLabel );
Application->ProcessMessages();
}
//자료넣기
MainQuery->First();
for (int iRow=1; ! MainQuery->Eof ; iRow++)
{
for (int iCol = 0; iCol < MainQuery->Fields->Count ; iCol++)
{
Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // Row=.Zeile / Col=Spalte
Range.OlePropertySet("Value", MainQuery->Fields->Fields[iCol]->AsString );
Application->ProcessMessages();
}
MainQuery->Next();
}
ActiveWorkBook.OleFunction("SaveAs", FilePath ); //Datei speichern
}
catch(...)
{
ShowMessage("이상이 발생했습니다.");
}
Excel.OleFunction("Quit");
Excel = Unassigned;
ShowMessage("엑셀저장이 완료 되었습니다.");
|