2011-09-02 3 views
0

C# 응용 프로그램에서 버튼을 클릭하여 새 Excel 프로세스를 열 수 있습니다. 그런 다음 입력 대기를 기다리고 새 Excel 파일을로드합니다. 문서를로드하기 전에 모든 매크로와 도구를로드해야하기 때문에이 작업을 수행해야합니다 (그렇지 않으면 렌더링 버그가 있음).Excel 프로세스를로드하고 문서를 닫을 때 전체 프로세스 닫기

내가 그 버튼을 다시 클릭하면 프로세스 ID는 프로세스가 이미 존재하는 경우, 프로세스는 달리, 새로운 프로세스가 생성, 포커스가의 PID와, var에 저장되고 :

Process processExcel = null; 

if (pId_m.HasValue) 
{ 
    try 
    { 
     processExcel = Process.GetProcessById(pId_m.Value); 
    } 
    catch (Exception ex) 
    { 
     Log.MonitoringLogger.Error("Unable to find Pid : " + pId_m,ex); 
    } 
} 

if (processExcel != null && (processExcel.HasExited == false)) 
{ 
    AutomationElement element = AutomationElement.FromHandle(processExcel.MainWindowHandle); 
    if (element != null) 
    { 
     element.SetFocus(); 
    } 
} 
else 
{ 
    ProcessStartInfo info = new ProcessStartInfo(); 
    info.FileName = "Excel.exe"; 
    info.Arguments = " /e "; 
    processExcel_l = Process.Start(info); 
    pId_m = processExcel_l.Id; 
    processExcel_l.WaitForInputIdle(); 
    processExcel_l.StartInfo = new ProcessStartInfo(path); 
    processExcel_l.Start(); 
} 

문제는 다음과 같습니다. Excel 문서 창이 닫히고 Excel 창을 닫을 때 단추를 클릭하면 Excel 프로세스에 포커스가 설정되지만 문서는 표시되지 않습니다 ... 이 동작은 논리입니다 ,하지만 내가 원하는 것을 위해 작동하지 않습니다 ...

새로운 프로세스와 새 문서를 내부에로드하는 소프트웨어를 보았습니다. 문서 닫기 버튼을 클릭하면 전체 프로세스가 종료되었습니다 ... 어떻게 재현 할 수 있습니까?

편집 : 좋아,

마지막으로 대신하는 과정에 초점을 설정, 나는 (파일이 이미 열려 있으면 초점 설정)이 과정에서 파일을 시작했다.

그것은 내가 정말하고 싶었던 게 아니에요,하지만 내 문제를 해결 ... 당신의 응용 프로그램을 종료 한 다음 닫기를 엑셀 프로세스

답변

1

나는 수동으로 프로세스를 실행하는 대신 Excel COM 모델을 사용하는 것이 좋습니다. 워크 시트의 이벤트를 구독하고 응용 프로그램을 닫을 수 있습니다.

이 MSDN 문서 도움이 될 수 있습니다

http://msdn.microsoft.com/en-us/library/wss56bz7(v=vs.80).aspx 실제로

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheet_members.aspx

+0

COM을 알고 있지만 COM을 통해 사용자에게 새 프로세스의 Excel 창을 표시 할 수 없다고 생각합니다. 사용자에게 Excel 창을 표시하지 않고 Excel의 데이터 만 사용할 수 있다고 생각합니다. – metalcam

0

기다립니다 : (전용 엑셀 문서를 닫을 처리 할 수 ​​

processExcel_l.WaitForExit(); 
Application.Exit(); 

Excel 프로세스가 아님) 아마 Excel API를 참조해야합니다.

+0

, 나는 단지 엑셀 문서를 닫는 처리하는 ... 그리고 프로세스 아이디와 COM의 오브제를 혼합하는 방법을하지 수행하는 방법 (프로세스가 열려있을 때 두 번째 문서를 열지 않음) ... – metalcam

관련 문제