Pergunta

Estamos usando o Excel para converter SpreatSheetML para XLS em um webservice ASP.NET. Além disso, se o usuário verifica as caixas certas, gerar um segmento que usa o Excel para imprimir a folha de cálculo.

Recentemente, temos implantado o aplicativo em um novo ambiente, e, em seguida, começamos a ter problemas: a primeira vez que alguém tenta imprimir, Excel parece travar no servidor - ou seja, a chamada para o método PrintOut no livro nunca retorna .

Mas se logar-se para o servidor como a identidade do pool de aplicativos e aberto Excel, enviar algo para a impressora, e fechá-la novamente, a impressão vai trabalhar a partir de então!

Eu suspeito que o Excel está mostrando um invisible dialog - os sintomas são os mesmos que tivemos anteriormente, num momento em que Excel parecia tenda em um "não pode usar objeto vinculação e incorporação de" -dialog que apareceu quando Excel abriu

Eu sei que usando do lado do servidor do Office automação é ruim, mas este é um aplicativo legado que é muito difícil de mudança, então por favor não me aconselham a re-projetar a nossa solução.

Alguém já teve alguma experiência com este tipo de comportamento?

Foi útil?

Solução

Bem, ninguém parece ter tido este problema.

A coisa realmente estranha é que meus trabalhos noturnos (comuns .NET .exe) são perfeitamente capazes de imprimir. - É apenas meus serviços web que têm este problema

Então, eu resolvi o problema, fazendo o que eu deveria ter feito há muito tempo: Eu fiz um simples serviço do Windows com topshelf , que responde a algumas mensagens MSMQ e faz a impressão, e, em seguida, os meus serviços web pode encomendar impressos via uma fila de mensagens.

Muito melhor em todos os sentidos!

Outras dicas

Eu tive nenhum fim de problemas (mau desempenho, processos de suspensão, falhando processos etc) usando o Microsoft Excel, Word e PowerPoint através de interoperabilidade em um serviço web para imprimir documentos do Office para o formato PDF. Eu também enfrentou problemas que eu suspeito são por causa de caixas de diálogo invisíveis (talvez um arquivo está corrompido, somente leitura recomendada tiver sido definida, o arquivo é protegido por senha, ou qualquer outro).

Eu sei que há ferramentas disponíveis que não utilizam o Office, mas eles são muito caros. Minha solução foi a mudança para automatizar OpenOffice. OpenOffice parece ser muito mais estável, e eu processos de suspensão esquerda e similares para trás.

Então, enquanto eu suponho que eu estou dizendo "não automatizar o Microsoft Office", eu não estou sugerindo que você abandone a automação completamente; só que eu tive muito OpenOffice automatizar mais sucesso do Microsoft Office.

SpreadsheetGear for .NET pode ler xls ou pastas de trabalho XLSX e pode imprimir para a impressora padrão sem exibir qualquer caixas de diálogo (ver o método WorkbookView.Print ()).

Você pode baixar uma avaliação aqui .

Disclaimer: eu próprio SpreadsheetGear LLC

Como muitas pessoas, eu Have vi esse tipo de comportamento. É causada por usando as APIs do Office em um servidor, especialmente uma aplicação ASP.NET de vários segmentos.

No entanto, você disse que não quer saber sobre não tiro no próprio pé, por isso há pouco mais a dizer. Você parece estar preso pelas consequências da loucura anteriormente.


OK, me diga se você já ouviu este um:

Um homem faz uma pergunta sobre StackOverflow. Ele diz: "Então, coisas ruins acontecem quando eu automatizar um aplicativo do Office de dentro de um serviço". Então, John Saunders diz: "Então, não automatizar a aplicação do Office a partir de dentro de um serviço. Automatizá-lo de dentro de um aplicativo de desktop, como o Microsoft destina a ser feito."

Quando uma solicitação chega para algo que requer Excel, você deve criar um processo de execução de um aplicativo Windows Forms. A aplicação pode ter que começar com nenhuma janela, ou você pode precisar para iniciá-lo no contexto de um Remote desktop conexão. Em qualquer caso, a tarefa a ser realizada pode ser passado como um parâmetro de linha de comando, ou o programa pode hospedar um serviço WCF para ter comandos enviados a ele.

Este programa pode chamar Excel como Excel espera ser chamado. Provavelmente, pode até mesmo lidar com mais de um comando para o Excel (um de cada vez). No entanto, se ele trava, o processo pode ser morto e outro começou.

Eu nunca tentei isso, mas parece que ele iria trabalhar melhor do que tentar obter Office Automation para fazer algo que não foi projetado para fazer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top