2010-03-20 1 views
1

필자는 필자의 응용 프로그램에서 필드를 채우는 자동화 된 Microsoft Word 템플릿을 가지고 있으며, 사용자가이 템플릿을 열 때 인쇄 요청을 할 때이 템플릿을 엽니 다.C#에서 자동화 된 Microsoft Word를 여는 성능을 향상시키는 방법은 무엇입니까?

그러나 필드를 채운 후 사용자가 인쇄를 요청할 때마다 Word 응용 프로그램을 만드는 것은 비용이 많이 들고 템플릿을 여는 동안 약간의 지연을 초래할 수 있습니다. 따라서 Word에 대한 참조를 캐시 한 다음 새로 채워진 템플릿을 열면됩니다.

파일을 여는 것으로 성능 문제가 해결되면서 매번 Word를 다시 만드는 것보다 비용이 적게 들지만이 방법은 사용자가 전체 Word 응용 프로그램이 아닌 문서를 닫을 때만 작동합니다. 이 문제가 발생하면 Word에 대한 참조가 유효하지 않게되고 다음에 템플릿을 여는 요청시 "RPC 서버를 사용할 수 없습니다."예외가 발생합니다. BeforeClosing 이벤트를 구독하려고 시도했지만 Word를 종료 할뿐만 아니라 문서를 닫는 원인이됩니다.

내 질문은 Word가 문서를 닫는 지 또는 전체 응용 프로그램을 종료 하는지를 아는 방법으로 적절한 조치를 취하거나 Word 템플릿을 여는 성능 개선에 대한 다른 방향을 제시합니다.

+0

인쇄를 제공합니까? 그 길에서 얼마나 멀리 떨어져 있니? 인쇄 API,보고 API 또는 PDF 구성/인쇄와 같은 다른 옵션이있을 수 있습니다. –

+0

@Marc : 이것은 인쇄 기능을위한 것입니다. 지금까지 내가 가지고있는 곳까지 Word 이외의 다른 옵션을 고려하지 않았습니다.이 서식 파일은 이전에 수동으로 채워진 공식 서식이며 지금은 자동화로 원했기 때문에 두 번째로는 인쇄 및 모양과 느낌을 크게 제어 할 수 있습니다. Word 필드를 사용하여 양식을 자동화합니다. –

답변

3

Word 닫기 이벤트를 제대로 구독하는 방법에 익숙하지 않습니다. 그러나 당신이 취할 수있는 한 가지 옵션은 Word가 닫히지 않고 캐싱 경로를 사용한다고 낙천적으로 가정하는 것입니다. 높은 수준에서 Word가 닫힐 때 throw 된 Exception 형식을 잡습니다. 이 예외가 발생하면 단어에 대한 참조를 제거하고 처음 발생했던 것처럼 작업을 반복하십시오.

이렇게하면 항상 캐싱을받을 수 없습니다. 그러나 사용자가 문서를 닫을 수있는 상황을 활용할 수 있습니다.

+0

고맙습니다. 그것은 유일한 방법으로 보인다 .. –