문제

ASP.NET 웹 서비스에서 SpreatSheetML을 XLS로 변환하기 위해 Excel을 사용하고 있습니다. 또한 사용자가 오른쪽 확인란을 확인하면 Excel을 사용하여 스프레드 시트를 인쇄하는 스레드를 생성합니다.

최근에 우리는 새로운 환경에서 앱을 배포 한 다음 문제가 발생하기 시작했습니다. 누군가 처음 인쇄하려고 할 때 Excel은 서버에 매달려있는 것 같습니다. 즉 PrintOut 통합 문서의 메소드는 결코 반환되지 않습니다.

그러나 애플리케이션 풀 아이덴티티로 서버에 로그인하고 Excel을 열면 프린터에 무언가를 보내고 다시 닫으면 인쇄가 작동합니다!

나는 Excel이 보여지고 있다고 생각합니다 invisible dialog - 증상은 우리가 이전과 동일합니다. Excel이 열릴 때 나타난 "객체 연결 및 내장을 사용할 수 없습니다"- 디 알로그에서 Excel이 멈출 수 있었던 시간입니다.

서버 측 사무실 자동화를 사용하는 것이 나쁘다는 것을 알고 있지만 이것은 변경하기가 매우 어려운 레거시 앱이므로 솔루션을 다시 설계하는 것이 좋습니다.

이런 종류의 행동에 대한 경험이 있습니까?

도움이 되었습니까?

해결책

글쎄, 아무도이 문제를 겪지 않은 것 같습니다.

정말 이상한 점은 내 야간 일자리 (일반 .net .exe)가 완벽하게 인쇄 할 수 있다는 것입니다.이 문제가있는 내 웹 서비스 일뿐입니다.

그래서 나는 오래 전에해야 할 일을함으로써 문제를 해결했습니다. 나는 간단한 Windows 서비스를 만들었습니다. 상단 핀, 일부 MSMQ 메시지에 응답하고 인쇄를 수행 한 다음 내 웹 서비스는 메시지 대기열을 통해 인쇄물을 주문할 수 있습니다.

모든면에서 훨씬 더 좋습니다!

다른 팁

Microsoft Excel, Word 및 PowerPoint를 사용하여 웹 서비스에서 PDF 형식으로 인쇄하기 위해 Microsoft Excel, Word 및 PowerPoint를 사용하여 문제가 끝나지 않았습니다. 나도 보이지 않는 대화 상자 때문이라고 생각하는 문제에 직면했다 (파일이 손상되었거나 읽기 전용 권장이 설정되었거나 파일이 암호로 보호되거나 무엇이든).

사무실을 사용하지 않는 도구가 있다는 것을 알고 있지만 매우 비쌉니다. 내 해결책은 오픈 오피스 자동으로 전환하는 것이 었습니다. OpenOffice는 훨씬 더 안정적 인 것처럼 보이며, 나는 교수형 과정 등을 남겼습니다.

그래서, 나는 "Microsoft Office를 자동화하지 마십시오"라고 말하는 동안, 나는 당신이 자동화를 포기할 것을 제안하지 않습니다. 내가 가진 것만 많이 Microsoft Office보다 OpenOffice를 자동화하는 더 많은 성공.

.NET 용 스프레드 시트 기어 XLS 또는 XLSX 통합 문서를 읽을 수 있으며 대화 상자를 표시하지 않고도 기본 프린터에 인쇄 할 수 있습니다 (WorkbookView.print () 메소드 참조).

평가를 다운로드 할 수 있습니다 여기.

면책 조항 : 스프레드 시트 기어 LLC를 소유하고 있습니다

많은 사람들처럼, 나는 가지다 이런 종류의 행동을 보았습니다. 서버에서 사무실 API, 특히 멀티 스레드 ASP.NET 응용 프로그램을 사용하여 발생합니다.

그러나, 당신은 당신이 발에 자신을 쏘지 않는 것에 대해 알고 싶지 않다고 말 했으므로 할 말이 거의 없습니다. 당신은 초기 어리 석음의 결과에 갇힌 것 같습니다.


알았어, 당신이 들었다면 저를 멈추십시오 이것 하나:

한 남자가 stackoverflow에 대한 질문을합니다. 그는 "서비스 내부에서 사무실 신청서를 자동화 할 때 나쁜 일이 발생합니다"라고 말합니다. 따라서 John Saunders는 "서비스 내부에서 사무실 응용 프로그램을 자동화하지 마십시오. Microsoft가 수행하려는대로 데스크탑 응용 프로그램 내부에서 자동화하십시오."

Excel이 필요한 것에 대한 요청이 들어 오면 Windows 양식 응용 프로그램을 실행하는 프로세스를 작성해야합니다. 응용 프로그램은 창으로 시작해야 할 수도 있거나 창의 맥락에서 시작해야 할 수도 있습니다. 원격 데스크탑 연결. 어쨌든 수행 할 작업은 명령 줄 매개 변수로 전달 될 수 있거나 프로그램이 WCF 서비스를 호스팅하여 명령을 전송할 수 있습니다.

이 프로그램은 Excel이 호출 될 것으로 예상되는 것처럼 Excel을 호출 할 수 있습니다. 아마도 하나 이상의 명령 (한 번에 하나씩)을 처리 할 수도 있습니다. 그러나 매달리면 프로세스가 죽고 다른 프로세스가 시작될 수 있습니다.

나는 이것을 시도한 적이 없지만, 그것이 설계되지 않은 일을하기 위해 사무실 자동화를 얻는 것보다 더 잘 작동하는 것처럼 들립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top