Question

Nous utilisons Excel pour convertir SpreatSheetML à XLS dans un webservice ASP.NET. De plus, si l'utilisateur vérifie les cases à droite, nous frayer un fil qui utilise Excel pour imprimer la feuille de calcul.

Récemment, nous avons déployé l'application dans un nouvel environnement, puis nous avons commencé à avoir des problèmes: la première fois que quelqu'un essaie d'imprimer, Excel semble se bloquer sur le serveur - à savoir l'appel à la méthode de PrintOut sur le classeur ne retourne jamais .

Mais s'il faut se connecter au serveur que l'identité du pool d'applications et Excel ouvert, envoyer quelque chose à l'imprimante, et fermez-le à nouveau, l'impression de travailler à partir de là!

Je soupçonne que Excel affiche un invisible dialog - les symptômes sont les mêmes que nous avions auparavant, un moment où Excel semblait caler sur un « ne peut pas utiliser l'objet liaison et incorporation » -dialog qui est apparu lors de l'ouverture Excel

Je sais que l'utilisation bureautique du côté serveur est mauvais, mais c'est une application héritée qui est très difficile de changer, alors s'il vous plaît ne pas me conseiller de re-conception de notre solution.

Quelqu'un at-il eu des expériences avec ce genre de comportement?

Était-ce utile?

La solution

Eh bien, Noone semble avoir eu ce problème.

La chose vraiment bizarre est que mes travaux de nuit (.exe .NET ordinaire) sont parfaitement capables d'imprimer - il n'y a que mes services web qui ont ce problème

.

Je résolu le problème en faisant ce que je l'aurais fait depuis longtemps: j'ai fait d'un simple service Windows avec

Autres conseils

J'ai eu des problèmes sans fin (mauvaise performance, les processus de suspension, s'écraser les processus, etc.) à l'aide de Microsoft Excel, Word et PowerPoint par Interop dans un service Web pour imprimer des documents Office au format PDF. Moi aussi, je l'ai fait face à des problèmes que je soupçonne sont en raison de boîtes de dialogue invisibles (peut-être un fichier est corrompu, lecture seule recommandée a été définie, le fichier est protégé par mot, ou autre).

Je sais qu'il existe des outils qui n'utilisent pas Office, mais ils sont très chers. Ma solution a été de passer à l'automatisation de OpenOffice. OpenOffice semble être beaucoup plus stable, et je l'ai laissée en suspens processus et comme derrière.

Alors, alors je suppose que je dis « ne pas automatiser Microsoft Office », je ne dis pas que vous abandonniez l'automatisation tout à fait; juste que j'ai eu beaucoup plus de succès que l'automatisation OpenOffice Microsoft Office.

SpreadsheetGear pour .NET peut lire des classeurs xls ou xlsx et peut imprimer sur l'imprimante par défaut sans afficher boîtes de dialogue (voir la méthode WorkbookView.Print ()).

Vous pouvez télécharger une évaluation .

Disclaimer: Je détiens SpreadsheetGear LLC

Comme beaucoup de gens, je Vous vu ce genre de comportement. Elle est causée par l'utilisation des API Office dans un serveur, en particulier une application ASP.NET multithread.

Cependant, vous avez dit que vous ne voulez pas savoir de ne pas se tirer une balle dans le pied, donc il y a peu de plus à dire. Vous semblez être pris au piège par les conséquences de la folie plus tôt.


OK, me arrêter si vous avez entendu ce un:

Un homme pose une question sur StackOverflow. Il dit: « SO, mauvaises choses arrive quand j'automatiser une application Office à l'intérieur d'un service ». Alors, dit John Saunders: « Alors, ne pas automatiser l'application Office à l'intérieur d'un service. Automatiser de l'intérieur d'une application de bureau, comme Microsoft destiné à faire ».

Lorsqu'une demande est pour quelque chose qui nécessite Excel, vous devez créer un processus en cours d'exécution d'une application Windows Forms. L'application peut commencer sans fenêtre, ou vous devrez peut-être commencer dans le contexte d'un bureau à distance connexion . Dans tous les cas, la tâche à réaliser peut être transmis en tant que paramètre de ligne de commande, ou le programme peut héberger un service WCF d'avoir des commandes qui lui sont envoyées.

Ce programme peut appeler Excel comme Excel attend d'être appelé. Il peut probablement même gérer plus d'une commande à Excel (un à la fois). Toutefois, si elle se bloque, le processus peut être tué et un autre a commencé.

Je ne l'ai jamais essayé, mais il semble que cela fonctionnerait mieux que d'essayer d'obtenir Office Automation de faire quelque chose, il n'a pas été conçu pour faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top