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

Python Discussion :

Constantes Excel (win32com)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut Constantes Excel (win32com)
    Bonjour,
    J'ai un problème avec win32com et les constantes.
    J'ai besoin de convertir des fichiers xls en csv.
    Je me disais que le plus simple serait d'ouvrir le fichier xls et de l'enregistrer sous au format csv.
    Problème, je n'arrive pas à avoir les constantes (pour bien avoir le format de fichier).

    (get_list est une fonction que j'ai ajouté dans win32com.client.Constants pour voir le __dicts__ - si quelqu'un peut me donner une autre solution plus élégante, je suis preneur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Constants:
      """A container for generated COM constants.
      """
      def __init__(self):
        self.__dicts__ = [] # A list of dictionaries
      def __getattr__(self, a):
        for d in self.__dicts__:
          if a in d:
            return d[a]
        raise AttributeError(a)
     
      def get_list(self): # < fonction ajoutée
        return self.__dicts__
    Voici donc le cas de test super simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import win32com.client
     
    class ExcelDocument(object):
        def __init__(self, visible=False):
            self.app = win32com.client.Dispatch("Excel.Application")
            print win32com.client.constants.get_list()
     
    xl = ExcelDocument() # affiche une liste vide.
    Quelqu'un saurait-il comment je peux connaître les constantes et comment les utiliser ?

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    En faisant une petite recherche de 5 secondes avec google

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from win32com.client import constants as c
    myWorkBook.SaveAs('results.csv', c.xlCSV)

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Les constantes sont définies par EXCEL et cachées par l'interface COM.
    Pour les "voir", il faut les définir dans un module python qui pourra être importé.
    C'est ce que fait makepy, un script win32com, dans le répertoire ...\win32com\client.
    Après avoir lancé le script, il affiche l'ensemble des interface COM connues dans la registry.
    Il faut chercher et sélectionner Microsoft Excel.
    La trace de l'exécution donne le chemin du fichier crée.
    Ne pas y toucher, win32 le charge par défaut.

    Une fois cela fait, le script suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import win32com.client as w32
    from win32com.client import constants
    if __name__ == "__main__":
        app = w32.Dispatch('Excel.Application')
        print constants.xlAbsolute
    ne plante plus.
    Et vous disposez en prime d'un dump de l'API d'EXCEL - mais il vous faudra quand même aller dans les MSDN pour l'utiliser.

    La punition est que l'API est alors sensible à la casse alors que COM utilisé out of the box est moins rigide.

    Bon courage

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut
    @Wiztricks : Merci, ça marche.
    @fred1599. Merci aussi mais c'est bien parce que cela ne marchait pas si simplement que j'ai posté :-)

Discussions similaires

  1. Convertir les noms de constantes Excel en valeurs numériques
    Par Martin_77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/07/2008, 09h12
  2. Excel Graphique - Tracer une ligne constante
    Par eristoff_night dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/10/2007, 10h33
  3. [VBA][Excel]Array en constante
    Par Pollux dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/02/2006, 12h46
  4. python et excel [win32com] : caractériel ? SOS
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 19/10/2005, 17h24
  5. [VB6][Tendance d'Excel] Calcul des constantes de l'equation
    Par ludotek dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/08/2005, 14h41

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