|
초짜 님이 쓰신 글 :
: 안녕하세요. 지난번에 한꼬마님께서 가르쳐 주신대로 액셀의 데이터를 가져와 잘 사용하고 있습니다. 다시 한번 감사... (--)(__)
: 한 가지 질문이 있는데요...
:
: xlBooks.OleProcedure("Close") ;
: xlApp.OleProcedure("Quit") ;
:
: 이 부분에 대한 질문입니다.
:
: 제가 windows 2000에 빌더4를 사용하는데,
: 액셀파일을 열어서 셀의 데이터를 그대로 스트링그리드로 가져온 다음 곧바로 닫아버리는데...
: 프로세스 뷰어로 보면 EXCEL.EXE 프로세스가 죽지 않고 그대로 떠 있습니다.
: 또 다른 파일을 열면 다시 EXCEL.EXE 프로세스가 또 하나 생기구여....
: 위 코드대로 하면 프로세스가 죽지않나요? 궁금해요....
:
: 그래서 임시방편으로 해본 방법이
: 1. EXCEL.EXE 프로세스가 파일을 열때마다 생겨서 xlApp.isEmpty()를 사용해서 해결했구요..
: 이 방법이 맞는지 --a
: 2. 프로세스가 죽지 않는 문제는 API 함수로 강제로 닫아버리라고 POSTMESSAGE를 사용했는데....
: 참고로 제 컴이 윈2000인데 메모리 참조에러가 발생하구요...(프로세스는 죽더라구요...)
: 98에서 테스트 하니까 잘못된 연산 어쩌구.....이러면서 에러나구요....이궁...--a
:
: 결론은 프로세스를 어떻게 에러없이 죽일수 있을지.....
안녕하십니까?
한꼬맹이 입니다.
엑셀개체가 메모리에서 안 없어 진다구요... 그럴리가 없는데요...
제가 엑셀개체 많이 다루어 봤는데.. 그런적은 없었는데요...
초짜님께서 뭐가 실수를 하셨느지 다음코드한번 테스트 해보세요..
저도 윈도우 2000 서버라서 테스트해보고 올립니다. 불러온 엑셀개체 프로세스
확실히 죽습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant Books, App;
App = Variant::CreateObject("Excel.Application");
App.OlePropertySet("Visible", true);
ShowMessage("엑셀개체 활성화");
Books = App.OlePropertyGet("Workbooks");
Books.OleProcedure("Add");
ShowMessage("워크북 생성");
if(!Books.IsEmpty()){
Books.OleProcedure("Close");
ShowMessage("워크북 종료");
}
if(!App.IsEmpty()){
App.OleFunction("Quit");
ShowMessage("엑셀 종료");
}
}
그럼 참고하세요...
|