Excel & .Net ? [Résolu]

Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- - Dernière réponse : billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 23 mai 2008 à 09:29
Bonjour,

Alors voila, j'aurais juste une petite question à vous poser, ca devrait pas être long ?

Je dois faire un librairie .Net (en C#) qui permet d'ouvrir un document excell (avec plein de feuilles) et qui insére des valeurs dans les bonnes cellules.
Cependant, le document excel (template) n'est pas vide et contient des formules de calcul plus ou moins compliqués.
J'ai, bien entendu, pour certaines opérations quelques contraintes: exemple, une somme sur une colonne dans le template où je dois insérer plus de valeurs que prévu sur le template (je dois donc insérer des lignes sans altérer le bon fonctionnement de la somme).

Alors ma question est simple, est-ce réalisable facilement et avec quelle librairie (librairie .Net, objet COM, ...) ?


Pour ma part:
1) je pense fortement que oui (c'est du microsoft quand même) mais j'ai pas d'expérience sur laquelle m'appuyer.
2) J'ai cherché sur le net et j'ai trouvé des gens qui disait "c'est compliqué", d'autres "non".
3) J'ai trouvé pas mal de librairie différente pour faire ceci. J'ai aussi essayé un exemple de code ( http://www.csharpfr.com/code.aspx?ID=35272 ) qui ne fonctionne pas de mon côté. Cependant, j'ai trouvé de mon côté une librairie .Net: Microsoft.Office.Tools.Excel, ca m'a l'air pas mal, non ?

Pour ma config: Visual Studio .Net 2005 (Team Edition) & Suite Office 2002 (SP3) installé.
Note: on pourra cependant me demandé de changer de version Office (et oui, sinon ca serait trop simple ^^)


Merci d'avance,



Billou_13
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
3
Merci
Bon, alors réponse à ma question, c'est faisable en passant par les objets COM.
On peut insérer une valeur au milieu d'un somme sans altérer les valeurs.

Voici le secret:

1) Mon template est un fichier excel ayant une cellule avec la somme des chiffres de B2 à B6 (ma cellule est en B7 mais peut importe)


2) Voici le code permettant d'insérer une ligne sans altérer la somme:
(Référence: Objet COM -> Microsoft Excel 10.0 Object Library)

//Directives
using Excel;
using ExcelApplication = Excel.Application;

//Code
public static void ModifyDocument(string template, string destination)
{
ExcelApplication excel = null;
Workbook wb = null;
Worksheet ws = null;
try
{
excel = new ExcelApplication();
excel.Visible = false;//Evite de montrer excel à l'utilisateur
excel.DisplayAlerts = false;//Evite de mettre des pop-up à l'utilisateur (ex: écrasement de fichier)

wb = excel.Workbooks.Open(template, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value);

ws = (Worksheet)wb.Sheets[1];

//Insertion d'une ligne
Range r2 = ws.get_Range("A4", Missing.Value).EntireRow;
r2.Insert(XlInsertShiftDirection.xlShiftDown, false);

//Mise en place d'une valeur dans la nouvelle ligne
Range r3 = ws.get_Range("B4", Missing.Value);
r3.Cells.Value2 = 6;

//Save file
wb.SaveAs(destination, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value);

}
finally
{
if (excel != null)
excel.DisplayAlerts = true;

if (wb != null)
wb.Close(false, Missing.Value, Missing.Value);

if (ws != null)
Marshal.ReleaseComObject(ws);

if (wb != null)
Marshal.ReleaseComObject(wb);

if (excel != null)
{
excel.Quit();
Marshal.ReleaseComObject(excel);
excel = null;
}
}
}

A voter !!!

Bonne journée à tous,


Billou_13

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
0
Merci
Je souhaiterais (car je viens d'y penser) ajouter une question à l'affaire.

Pourrais-je déployer et faire fonctionner cette librairie sur un serveur windows sans installer la même suite office dessus ?
Si non, que devrais-je installer: toute la suite, juste une libraire, ... ?

Merci


Billou_13
Commenter la réponse de billou_13
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
21 octobre 2010
0
Merci
Alors j'ai jamais vraiment fait (enfin une fois mais pour un truc assez simple).
La lib Microsoft.office.Tools.Excel est directement la lib utilisée par excel, dont tu as l'automation directement via l'API Excel. au niveau complexité, cest pas forcément trivial a aborder, mais une fois assimilé jai cru comprendre que cetait pas si compliqué que ca, il faut juste bein maitrisé ce que tu veux faire au niveau fonctionnel dans le soft. Donc théoriquement cest pas que ta lib est pas mal, cest que cest ce qu'on est censé utiliser lorsqu'on veut faire de l'automation excel. apres je pense que d'autres personnes doivent avoir plus dexperience que moi sur le sujet.
Commenter la réponse de leprov
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
0
Merci
Après une bonne demi journée de recherche, voici mes conclusions:

1) J'ai abandonné les recherches sur Microsoft.office.Tools.Excel car j'ai pas trouvé assez de détails et le peu que j'ai trouvé m'ont montré que c'était inadapté à ma demande. (->leprov: aurais-tu des exemple d'utilisation ?)

2) J'ai donc étudié la solution en passant par les objets COM pour la gestion de excel. Et, comme je m'en doutais, il faut installer Excel sur le serveur pour que cela marche.

Je penche donc actuellement pour la deuxième solution:
Reste donc à étudier la faisabilité de l'histoire: est-ce facile ou non d'insérer des cellules avec ce principe (sans altérer les opérations) ?

Merci à toi en tout cas pour les précisions,


Billou_13
Commenter la réponse de billou_13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.