IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

[C#] automation Excel


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Responsable technique
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Par défaut [C#] automation Excel
    Bonjour,
    Je suis en train de réaliser une application en C# qui doit générer des documents Excel.
    Le problème est que suivant la version d'excel installée, le nombre de paramètres des méthodes open et saveAs (entre autres...) diffèrent. Du coup, l'appli plante si la version de la fonction ne correspond pas à la version d'excel installée.

    Ma question est comment faire pour détecter la version d'excel installé et utiliser la bonne méthode??
    Quelqu'un a déjà eu ce genre de problème? Je n'ai pas réusii à trouver quelque chose de bien concret sur le net.

    Merci d'avance

  2. #2
    Membre averti

    Inscrit en
    Février 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 29
    Par défaut
    Essayes cette syntaxe (VB.NET)

    appExcel.Workbooks.Open([ReadOnly]:=True, [Filename]:="C:\test.xls")

    Ca permet de spécifier les paramètres dans n'importe quel ordre.
    Normalement les paramètres les + courant sont commun à toutes les versions d'excel

  3. #3
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Pour détecter la version d'Excel, une solution est d'aller fouiller dans la base de registres (en admettant que ton application tournera uniquement sur windows 9X et plus).
    Pour y accéder par le code, tu peux utiliser le namespace Microsoft.Win32.

    Par contre, du fait que certaines clés sont inaccessibles en fonction du profil de session windows, il se peut que balayer la base avec une boucle lève une exception.
    Je ne connais pas très bien la base de registres windows, j'ai retrouvé l'install Office à cette adresse, mais ce n'est peut-être pas le cas pour toutes les install :
    HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Office

    Donc pour y accéder par le code, tu peux faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Microsoft.Win32.RegistryKey maCle = Microsoft.Win32.Registry.LocalMachine;
    maCle = maCle.OpenSubKey("SOFTWARE");
    maCle = maCle.OpenSubKey("Microsoft");
    maCle = maCle.OpenSubKey("Office");
    string[] mesVersions = maCle.GetSubKeyNames();
    mesVersions est un tableau de chaines contenant, entre autres, les version d'Office installées sous la forme "8.0", "10.0", "11.0",...

    Voilà une base sur laquelle tu peux t'appuyer.

    Ceci dit, l'utilisation des méthodes dans ton automation ne dépend pas de la version d'Excel installée, mais des bibliothèques d'automation Excel que tu as ajoutées à ton projet.

    Si ton fichier Excel à générer n'est pas trop complexe, je te conseille d'utiliser les bibliothèques d'excel anciennes (pas trop non plus ! Excel 2000 me semble un bon compromis) pour que ton fichier résultant soit lisible par les versions plus récentes d'Excel.

  4. #4
    Membre averti
    Profil pro
    Responsable technique
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Par défaut
    Merci pour ces réponses!
    Je vais déjà pouvoir m'appuyer la dessus.

    Mais apres effectivemement, le pb vient des bibliothèques excel attachée au problème.
    Dans mon code, comment faire pour définir le bon nombre d'arguments de la fct open ou saveAs par exemple. En effet, le nb de paramètres diffèrent entre les lib 2000 et 2002. Du coup si je ne mets pas le bon nb d'arguments ca plante forcément....

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par ager1912
    Mais apres effectivemement, le pb vient des bibliothèques excel attachée au problème.
    Dans mon code, comment faire pour définir le bon nombre d'arguments de la fct open ou saveAs par exemple. En effet, le nb de paramètres diffèrent entre les lib 2000 et 2002. Du coup si je ne mets pas le bon nb d'arguments ca plante forcément....
    Pour utiliser la bonne méthode, il te suffit de faire un switch case en fonction de la version (c'est pas top moumoute au niveau propreté et lisibilité du code, mais ça devrait faire le taf )

    Ceci dit, je ne comprend toujours pas pourquoi tu veux absolument utiliser différentes librairies pour générer des fichiers Excel ?

    Cela doit venir des fichiers que tu ouvres : si tu sais qu'il ont été enregistrés sous différentes version d'Excel, alors la oui, je pense que tu doives utiliser les différentes librairies, au moins pour les ouvrir !

    Tout dépend de la version Excel utilisée pour enregistrer les fichiers que tu liras et de la version utilisée pour lire les fichiers que tu produiras (tu me suis ).

  6. #6
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Citation Envoyé par ager1912
    Bonjour,
    Je suis en train de réaliser une application en C# qui doit générer des documents Excel.
    Le problème est que suivant la version d'excel installée, le nombre de paramètres des méthodes open et saveAs (entre autres...) diffèrent. Du coup, l'appli plante si la version de la fonction ne correspond pas à la version d'excel installée.

    Ma question est comment faire pour détecter la version d'excel installé et utiliser la bonne méthode??
    Quelqu'un a déjà eu ce genre de problème? Je n'ai pas réusii à trouver quelque chose de bien concret sur le net.

    Merci d'avance
    Il n'y aurait pas un truc du genre "Application.Version"? Ca y est dans l'API en tout cas. La base de registres n'est pas toujours accessible pour des raisons de droits.

    En passant, utilises la version la plus ancienne de la dll car ce sera compatible avec les nouvelles versions.

  7. #7
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par Ditch
    Il n'y aurait pas un truc du genre "Application.Version"? Ca y est dans l'API en tout cas.
    Tu voudrais appeler le Application.Version de quel namespace ?
    Citation Envoyé par Ditch
    En passant, utilises la version la plus ancienne de la dll car ce sera compatible avec les nouvelles versions.
    Oui, je lui ai déjà dit, mais il est peut être passé à côté :p

Discussions similaires

  1. [Automation Excel] ajuster des cellules excel
    Par willich dans le forum Access
    Réponses: 4
    Dernier message: 10/10/2005, 10h04
  2. petit probleme avec automation Excel
    Par Tempotpo dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 05/08/2005, 08h57
  3. Automation Excel
    Par GoldenEye dans le forum MFC
    Réponses: 2
    Dernier message: 24/05/2005, 15h11
  4. automation excel : comment indiquer la feuille de travail ?
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 15h14
  5. Automation Excel
    Par cgo dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 19/03/2003, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo