2008-09-17 10 views
2

Nous avons une application basée sur Excel 2002/XP qui interagit avec SQL 2000/5 pour traiter des calculs actuariels assez complexes. L'application remplit bien sa fonction, mais elle est difficile à gérer.Quelqu'un at-il un bon exemple de contrôle de plusieurs instances Excel à partir d'une application .Net?

Nous essayons de créer une application ou un service de "contrôleur" qui peut gérer et surveiller ces différentes instances d'Excel (commandes de démarrage/arrêt/traitement, etc.) mais c'est malheureusement un peu un cauchemar InterOp. Est-ce que quelqu'un a un bon exemple (c'est-à-dire de travail) de faire quelque chose comme ceci dans VB.Net ou C#?

+0

Avez-vous besoin d'Excel? Pourquoi ne pas faire vous-même les calculs dans votre application .NET? –

+0

Prêcher à la chorale! L'effort de conversion est tout simplement trop et la direction ne paiera pas la facture pour "recodage" une application établie. –

Répondre

3

Ne le faites pas!

Nous avons essayé pendant des semaines d'obtenir quelque chose comme ça au travail et il ne se comporte tout simplement pas comme annoncé. Ne commencez même pas - abandonnez immédiatement! Les seules options que vous avez vraiment est une lourde implémentation basée sur MOSS côté serveur - les services Excel (Web) (ils l'appellent quelque chose comme ça). Windows COM Excel interop est à peu près mort et sera remplacé par MOSS.

L'autre option consiste à utiliser SpreadsheetGear. Il est en fait un produit fantastique

  1. Il est lightlingly rapide
  2. Le moteur est séparé de l'interface utilisateur afin que vous puissiez l'utiliser pour faire côté serveur stuff Excel (sans bureau installé)
  3. Assez pas cher
  4. Possède une API similaire à l'API Excel existante pour faciliter le transfert de code

Tout dépend des formules dont vous avez besoin dans votre feuille de calcul. Jetez un oeil à la liste des formules pour Spreadsheet Gear et s'il y a un match aller pour cela.

+0

"N'y pense même pas!"Je pense que nous allons essayer d'écrire un simple service de type" démarrer/arrêter/tuer ", mais le consensus semble être qu'interagir avec plusieurs instances est une voie dangereuse à suivre. –

1

Vous pouvez jeter un oeil à ce produit: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx

Il est tout code managé et bibliothèques .NET directes. Pas de maux de tête InterOp. Je ne l'ai pas utilisé moi-même, mais j'ai entendu de très bonnes choses de la part des gens du monde de la finance.

+1

Nous avons évalué ce produit. Malheureusement, il ne peut pas tout à fait couvrir nos besoins et l'effort de conversion serait énorme. –

1

Nous avons écrit un service qui contrôle une instance d'Excel 2003. Nous n'avons jamais réussi à fermer proprement les instances Excel, donc nous démarrons une instance lorsque le service est accédé pour la première fois, en sérialisant les requêtes clients.

2

Interop fonctionne correctement, sauf que vous vous retrouvez toujours avec des références aux objets Excel qui ne sont pas libérés, donc les instances Excel ne se ferment pas. L'article suivant KB explique pourquoi:

http://support.microsoft.com/default.aspx/kb/317109/EN-US/

Vous pouvez éviter le problème si vous avez très soigneusement le code écrit pour un ensemble limité de scénarios Interop. Mais dans le cas général, il est très difficile de le faire fonctionner de manière fiable.