2010-07-13 4 views
1

안녕하세요 모두들, 저는 많은 사람들이 Com 객체를 사용하여 만든 실행중인 Excel 응용 프로그램의 인스턴스를 닫는 것이 어렵다는 것을 알고있었습니다. 나는 간헐적으로 Excel 인스턴스가 완전히 닫히지 않도록 관리했지만 항상 그렇지는 않습니다 (나중에 설명하겠습니다).Microsoft Interop Excel 닫기 실행 인스턴스가 Excel?


내 문제는 오히려 더 복잡한 내가 할 응용 프로그램 만들려고하고 단순히 엑셀의 실행중인 인스턴스를 닫는 것보다 :

  1. 많은 사용 가능한 템플릿 중 하나를 사용하여 Excel 파일을 만들기을 (이 (또한 잘 작동 내 응용 프로그램에서 선택한 기준에 따라 템플릿의 미세)

  2. 채우기 세포)

  3. 를 작동 사용자가 내 응용 프로그램 내 데이터에서 파생 될 수없는 값을 계속 입력 할 수 있습니다. 여기에 프로세스를 닫고 COM 객체를 제거하는 것이 더 까다로운 작업이 있습니다.

  4. Excel을 닫을 때 데이터를 저장합니다. COM 개체 참조 그러나 이것은 분명히 엑셀 프로세스가 종료되지 않은 것을 의미합니다, com 개체 참조를 정리하려고 시도하지만, 사용자가 엑셀을 닫은 후에 워크 시트를 저장하도록 허용하지 않습니다. 또는 어쨌든 어떻게 구현했는지는 알 수 없습니다).

  5. 사용자가 Excel을 닫을 때 Excel 프로세스를 종료하고 싶습니다.

    나는 아직
    private void cleanUp() 
    { 
        for (int i = 0; i < ranges.Count; i++) 
        { 
         ranges[i] = null; 
        } 
    
        for(int i = 0; i < worksheets.Count; i++) 
        { 
         worksheets[i] = null; 
        } 
    
        for (int i = 0; i < worksheetwrappers.Count; i++) 
        { 
         worksheetwrappers[i] = null; 
        } 
        for (int i = 0; i < workbooks.Count; i++) 
        { 
         while (System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks[i]) > 0) 
           { 
          workbooks[i].Close(false, "", false); 
             workbooks[i] = null; 
           } 
        } 
        for (int i = 0; i < instances.Count; i++) 
        { 
           while (System.Runtime.InteropServices.Marshal.ReleaseComObject(instances[i]) > 0) 
           { 
            instances[i].Quit(); 
             instances[i] = null; 
           } 
         } 
    } 
    

    이 리팩토링과를 만들기 위해 다음과 같은

하여 COM 개체 정리에 관해서는

, 내가 정리 방법이 (문제가 자리하고있는 곳 여기) 멋지고 깔끔해서 불행히도 당신은 내가 가지고있는 것의 근본을 얻고 있습니다. 기본적으로


내 문제는 내가 자동으로 정리를 수행하지 못할 의미, 모든 COM 개체를 처리 할 때 아는되고 사용자가 스프레드 시트를 채워 후 더 많은 데이터를 입력 할 필요로 할 때 정리 작업을 수행 할 수 스프레드 시트가 채워진 후

내가 어떤 일종의 관찰자를 사용하여 Excel을 종료하고 모든 Com 개체 (고통)를 처리해야하는지, 아니면 내가 갖고 있지 않은 영리한 아이디어가있는 지 궁금하다. 생각. 당신은 당신의 문제를 해결하려고 할 수있는 모든 도움을

감사합니다,

답변

1

.

1 : 템플릿을 기반으로 워크 시트를 만들고 채우는 데이터

2 :

4 종료 프로세스를 기다립니다 : 매개 변수 "NewFileName에서"

3 과정 Excel을 시작 열기 워크 시트를 읽고 데이터 처리 및 처분

아마도이 옵션이 있습니다. 사용자가 세션을 종료했을 때 최소한 알게 될 것입니다.

+0

범례, 다른 정리 방법을 사용하여 작업 : D! – user389981

+0

@riffnl 코드를 넣으시겠습니까?이 코드는 제게는 매우 불편했습니다. –

+0

@l___ 코드가 없습니다. 나는 실제로 이것을위한 해결책을 만들지 않았다. 원래 질문은 실제로 : "사용자가 내 Excel 세션을 마칠 때를 알고 싶습니다." 그것이 내가 제안한 것이며, 프로세스를 사용하고 프로세스가 끝나기를 기다립니다 (http://support.microsoft.com/kb/305369 참조). – riffnl

관련 문제