2009-04-07 9 views
11

Un client souhaite "activer le Web" dans un calcul de tableur - l'utilisateur doit spécifier les valeurs de certaines cellules, puis leur montrer les valeurs résultantes dans d'autres cellules.Comment utilisez-vous Excel côté serveur?

(Ils ne veulent pas montrer à l'utilisateur une interface « comme une feuille de calcul ». Ce n'est pas une question de l'assurance-chômage.)

Ils ont une énorme feuille de calcul avec beaucoup de calculs sur de nombreuses feuilles. Mais, à la fin, seulement deux choses importent - (1) vous mettez des nombres dans quelques cellules sur une feuille, et (2) vous obtenez des nombres correspondants de quelques cellules dans une autre feuille. Le reste est une boîte noire.

Je veux présenter une interface utilisateur à l'utilisateur pour entrer les nombres qu'ils veulent, puis je voudrais ouvrir le fichier Excel par programme, définir les nombres, lui dire de re-calc, et lire le résultat.

Est-ce possible/conseillé? Y a-t-il un volet commercial qui facilite cela? Est-ce que leurs pièges ne sont pas envisagés?

(je sais que je peux utiliser Office Automation pour le faire, mais je sais qu'il est recommandé de ne pas faire côté serveur, car il tente d'exécuter dans le contexte d'un utilisateur, etc.)

Modifier : Beaucoup de gens disent que je dois recréer les formules dans le code. Cependant, ce serait incroyablement complexe. On dirait que cela pourrait être un problème résolu - est-ce que quelqu'un sait d'un composant d'un certain type qui le ferait pour moi? Quelqu'un doit avoir créé un système de génération "Excel-formula-to-code". Je serais heureux de payer pour cela.

Éditer/Solution:SpreadsheetGear est ce que je cherchais. Entre autres choses, il vous permet d'utiliser un XLS comme une calculatrice. Vous pouvez définir les valeurs brutes des cellules sélectionnées puis lire les valeurs des cellules calculées. Exactement ce que je cherchais.

Répondre

5

Vous ne voulez certainement pas utiliser interop sur le serveur, c'est assez mauvais de l'utiliser comme un kludge sur le côté client.

Je peux voir deux options:

Figure la logique de feuille de calcul. Cela peut vous être bénéfique à long terme en faisant de la logique métier une quantité connue, et à court terme vous pouvez trouver qu'il y a des bugs dans la feuille de calcul (j'ai rencontré des tonnes de feuilles de calcul monstres utilisées depuis des années bugs dans eux - tout le monde a juste supposé que les réponses doivent être correctes)

Évaluez SpreadSheetGear.NET, qui est fondamentalement un remplacement pour interop qui fait tout sans Excel (il réplique une énorme partie de la logique non-visuel d'Excel et des E/S dans .NET

+0

Le composant de SpreadsheetGear a fonctionné parfaitement, merci. – Deane

+0

Bon à entendre, je ne l'ai pas vraiment beaucoup utilisé pour les calculs Excel. Nous l'utilisons principalement pour l'importation et l'exportation de fichiers Excel pour des applications intranet, pour lesquelles il est fanatique (beaucoup mieux que nos outils de bureau qui ont encore du code d'interopérabilité) – David

0

Il semble que vous parlez que l'utilisateur a la feuille de calcul ouverte sur leur système local, et vous voulez qu'un site Web manipule cette feuille de calcul locale?

Si c'est le cas, vous ne pouvez pas vraiment faire cela. Même l'automatisation de bureau ne va pas aider, sauf si vous voulez les obliger à télécharger la feuille sur le serveur et télécharger une nouvelle version modifiée.

Ce que vous pouvez faire est de créer un service Web pour faire les calculs et ajouter du code vba ou vsto à la feuille Excel pour parler à ce service.

+0

Non, rien à voir avec le client. Je veux essentiellement utiliser la feuille de calcul comme une calculatrice transactionnelle sur le serveur - une grande formule compliquée. – Deane

+0

D'accord, je vous comprends maintenant. Dans ce cas, Randolpho couvre assez bien. –

4

Bien que cela soit certainement possible avec ASP.NET, c'est très déconseillé. Il est non évolutif et sujet aux erreurs de concurrence.

Votre meilleur pari est d'analyser les calculs de tableur et de les dupliquer. Maintenant, bien sûr, votre entreprise ne va pas aimer le temps qu'il faut pour faire cela, mais il va (probablement) leur donner un système plus utilisable. Vous pouvez également simplement servir la feuille de calcul aux utilisateurs de votre site Web, auquel cas vous ne faites presque rien. Si vos parties prenantes insistent vraiment sur l'utilisation d'Excel côté serveur, je vous suggère de regarder attentivement Excel Services comme le suggère le @John Saunders. Il peut ne pas vous obtenir tout vous voulez, mais il vous obtiendra un peu, et devrait résoudre certains des problèmes que vous finirez par essayer de le faire côté serveur avec ASP.NET.Cela ne veut pas dire que c'est une panacée; votre kilométrage variera certainement. Et Sharepoint n'est pas vraiment bon marché à acheter ou à entretenir. En fait, les coûts à court terme pourraient facilement être éclipsés par des coûts à long terme si vous suivez la voie de Sharepoint - mais il pourrait être la meilleure option pour répondre à une exigence. Je suggère toujours que vous repoussiez en faveur de coder toute votre logique dans un module .NET séparé. De cette façon, vous pouvez l'utiliser côté client et côté client. Excel peut facilement transmettre des calculs à un objet COM, et vous pouvez très facilement publier votre bibliothèque .NET en tant qu'objets COM. À la fin, vous auriez une architecture beaucoup plus maintenable et utilisable.

+0

+1 Vous aurez également la possibilité de tester vos calculs unitaires. –

+0

Absolument. Si vous avez plus d'un ou deux utilisateurs, vous pourriez facilement vous diriger vers des problèmes. (À tout le moins, ça va être lent). Mieux vaut utiliser une technologie qui est destinée à l'accès Web simultané. – andypaxo

+0

Est-ce que je risquerais des problèmes de concurrence même si je ne persistais pas dans le fichier Excel? Je ne veux rien sauvegarder - je veux juste entrer des données, recalculer, lire des données, puis abandonner. – Deane

7

C'est possible, mais pas conseillé (et officiellement non supporté).

Vous pouvez interagir avec Excel via COM ou les assemblys d'interopérabilité primaires .NET, mais il s'agit d'un processus côté client. Sur le côté serveur, aucun écran ou bureau n'est disponible et toute boîte de dialogue inattendue (par exemple) fera que votre application Web se bloque – Votre application se comportera de manière floue. De plus, attacher un processus Excel à chaque requête n'est pas exactement une approche à faibles ressources.

Travailler sur la boîte noire et la ré-implémenter dans un langage de programmation approprié est clairement la meilleure option (comme dans "plus fiable et plus rapide").

lecture connexe: KB257757: Considerations for server-side Automation of Office

+0

Excellente discussion sur les problèmes. +1 – Randolpho

1

Négliger la discussion s'il est logique de manipuler une feuille Excel sur le côté serveur, une façon d'effectuer cette chercherais probablement comme l'adoption de la

Microsoft.Office.Interop .Excel.dll

En utilisant cette bibliothèque, vous pouvez demander à Excel d'ouvrir une feuille de calcul, de modifier et de lire le contenu à partir de .NET. J'ai utilisé la bibliothèque dans une application WinForm, et je suppose qu'elle peut également être utilisée depuis ASP.NET.

encore, tenez compte des problèmes déjà mentionnés de concurrence ... Cependant, si la feuille est accessible unfrequently, pourquoi pas ...

1

La façon la plus simple de le faire est peut-être à:

Télécharger Excel classeur pour Google Docs - c'est très propre, selon mon expérience

Utilisez l'API de données Google Spreadsheets pour mettre à jour les données et renvoyer les nombres.

Voici un lien pour vous aider à démarrer sur ce point, si vous voulez aller dans cette direction:

http://code.google.com/apis/spreadsheets/overview.html

1

Permettez-moi d'être plus catégorique que d'autres ont été: ne pas utilisation côté serveur Excel . Il est destiné à être utilisé comme une application de bureau, ce qui signifie qu'il n'est pas destiné à être utilisé à partir de différents threads aléatoires, éventuellement plusieurs threads à la fois. Il vaut mieux écrire votre propre feuille de calcul plutôt que d'essayer d'utiliser un serveur Excel (ou tout autre produit de bureau Office).

C'est l'une des raisons pour lesquelles Excel Services existe.Une recherche rapide sur MSDN a mis en place ce lien: http://blogs.msdn.com/excel/archive/category/11361.aspx. C'est une liste de catégories, donc contient une liste de billets de blog sur le sujet. Voir aussi Microsoft.Office.Excel.Server.WebServices Namespace.

+1

Excellent point sur Excel Services. Dommage que vous ayez besoin de Sharepoint ... – Randolpho