2011-08-30 9 views
1

저는 Microsoft.Office.Interop.Excel을 사용하여 C#으로 Excel 보고서를 만듭니다. 이러한 보고서에는 많은 양의 그래픽이 포함되어 있으며 준비하는 데 오랜 시간이 걸립니다. 준비 과정에서 내 프로그램에서 사용하는 Excel 응용 프로그램의 인스턴스는 사용자에게 표시되지 않습니다.사용자가 Excel 인스턴스를 사용하지 못하도록

내 문제는 Microsoft Office가 응용 프로그램 인스턴스를 자동으로 공유하는 경향이 있다는 것입니다. 사용자가 Excel 통합 문서를 열면 Excel은 실행중인 Excel 인스턴스를 찾고 거기에서 문서를 엽니 다. 내 프로그램이 실행되는 동안 사용자가 Excel 통합 문서를 열려고하면 내 프로그램에서 사용하는 인스턴스에 연결됩니다.

이렇게하면 두 가지 문제가 발생합니다. 첫째, 보고서가 표시되기 전에 미리보기를 강제로 표시합니다. 둘째, 이제 내 프로그램이 Excel 인스턴스의주의를 둘러싼 사용자와의 싸움이 필요하며 대개 내 프로그램이 손실됩니다.

그래서 Excel 인스턴스가 문서를 열고 사용자가 엑셀을 여는 방법을 결정할 때 내 인스턴스를 무시하도록 요청하는 요청을 거부 할 수있는 방법이 있습니까? 문서?

+2

MS가 기본적으로 프로그램에서 Excel의 전체 사본을 실행하지 않고 Excel 보고서를 생성하는 방법이 있다면 좋지 않겠습니까? MS 제품은 일반적으로 함께 잘 작동하지만 오피스 문서 생성은 kludge로 돋보이는 것들 중 하나입니다. – Kibbee

답변

1

Application.WorkbookOpen 이벤트를 처리 할 수 ​​있습니다. 여기서 Excel의 두 번째 인스턴스를 시작하고 통합 문서를 열거 나 오류 메시지와 함께 통합 문서를 닫습니다.

나는 또한 Application.Interactive 속성을 보았습니다. 나는 이걸 가지고 놀지 않았지만, 너에게 쓸모가 있을지도 모른다.

+0

글쎄, 대화 형 속성이 작동하지 않습니다 - 통합 문서가 여전히 내 인스턴스에서 열립니다 - 일단 열면 손댈 수 없습니다. 첫 번째 제안을 시도해 보겠습니다. 읽기 전용 속성을 확인해야하지만, 내가 찾는 다른 것들이 있습니까? 예를 들어, 사용자가 열려고하는 통합 문서 또는 인터넷에서 다운로드 한 통합 문서의 WorkbookOpen 이벤트 ("저장"대신 "열기"사용)? –

+0

출처에 관계없이 Excel에 표시되는 모든 통합 문서에 대해 이벤트가 발생합니다. 웹 페이지에서 "열기"를 클릭하면 브라우저는 파일을 임시 폴더에 저장 한 다음 열어 로컬 파일을 여는 것과 같습니다. –

0

를 방문 제안 :

것은 당신이 엑셀 작업을 시작할 때마다, 두 개의 인스턴스를 만들고 두 번째 작업을 수행하십시오. 작업이 끝나면 두 번째 인스턴스와 해당 객체를 삭제 한 다음 첫 번째 인스턴스의 "UserControl"속성을 확인하십시오. "true"를 반환하면 객체 만 삭제하고 해당 인스턴스의 프로세스는 그대로 두십시오. "false"를 반환하면 인스턴스도 삭제합니다.

내가 알 수있는 한 사용자는 모든 통합 문서를 열고 닫을 수 있으며 삭제하지 않는 한 만든 첫 번째 인스턴스를 사용하며 두 번째 인스턴스는 삭제되지 않습니다.

관련 문제