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 :

envoyer un texte sur Microsoft Word


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut envoyer un texte sur Microsoft Word
    Bonsoir,

    Voici un code qui me permet d'envoyer un texte directement au NotePad.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    # -*- coding:Latin-1 -*-
     
    import os
    import win32con
    import win32gui
     
    def findControl(topHwnd,wantedText=None,wantedClass=None,selectionFunction=None):
        """
        The EnumChildWindows function enumerates the child windows that belong to the specified parent window
        by passing the handle to each child window, in turn, to an application-defined callback function.
        EnumChildWindows continues until the last child window is enumerated or the callback function returns FALSE.
        """        
        childWindows=[] # ex: childWindows ---> [(263952, '', 'Edit'), (263944, '', 'msctls_statusbar32')]
     
        try:
            win32gui.EnumChildWindows(topHwnd,_windowEnumerationHandler,childWindows)
        except:
             print"LE CONTROLE N'EST PAS UN CONTAINER! "
     
        return childWindows
     
     
    def _windowEnumerationHandler(hwnd, resultList):
        '''Pass to win32gui.EnumWindows() to generate list of window handle,
        window text, window class tuples.    
        '''
     
        resultList.append((hwnd,win32gui.GetWindowText(hwnd),win32gui.GetClassName(hwnd)))
     
     
    if __name__ == '__main__':
        import time
        ### 1/ Ouvrir le bloc-notes:
        os.startfile('notepad')
        time.sleep(4) 
     
        ### 2/ Récupérer le handle d'une fenêtre précise:
        BlocNote= win32gui.FindWindow(None,"Sans titre - Bloc-notes")
        print'Le handle du BlocNote est :',BlocNote
     
        ### 3/ Tous les controles:
        controls = findControl(BlocNote)
        print"Liste de tous les controls du Bloc Notes :",controls
     
        ### 4/ Envoie du texte à afficher:
     
        # J'envoie directement au widget 'Edit':
        for handle,nom,classe in controls:
            if classe=="Edit":
                win32gui.SendMessage(handle,win32con.WM_SETTEXT,0,"CE TEXTE EST ENVOYE PAR MON SCRIPT...")
    J'essaie en vain d'adapter ce code pour Microsoft Word. Je ne trouve pas de control 'Edit'.
    D'avance merci à qui pourra m'aider...

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonjour,

    A mon avis, tu n'as pas du trop chercher

    http://win32com.goermezer.de/content/view/173/285/
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    A mon avis, tu n'as pas du trop chercher
    Il faut quand même connaître la technologie COM de Windaube.

    Si le logiciel doit communiquer avec WORD, c'est la solution. Maintenant si le logiciel doit créer un document WORD, il est possible avec les dernières versions de créer directement le document WORD même le format XML doit être peu documenté. Enfin bon,je suis un peu fâché avec Windaube qui m'a posé de gros soucis inutilement.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Merci à tous les deux deux pour vos réponses.
    Quant à Fred, ton script fonctionne parfaitement. J'ai beaucoup cherché mais je ne connais pas du tout 'win32com'. De plus, je m'emmêle les pédales avec 'win32gui'; 'win32api' et 'win32con'. Qui fait quoi?

    Je vais étudier ton script mais peux-tu me dire s'il existe une page d'aide et notamment comment tu trouves les attributs 'Documents'; 'PageSetup'; 'Content'...
    J'ai trouvé la page :
    http://msdn.microsoft.com/fr-fr/libr...up(VS.80).aspx
    J'ai aussi utlisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print"worddoc.__dict__ :
         print"worddoc.__attr__ :
    mais sans grand succès.

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Eh bien en fait j'ai pas windows, mais python, un peu...

    tu fais un dir(commande)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import win32com.client
    >>> wordapp = win32com.client.Dispatch("Word.Application") # Create new >>> Word Object
    >>> wordapp.Visible = 0
    >>> worddoc = wordapp.Documents.Add()
    >>> dir(worddoc) # tu devrais voir tout ces attributs
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    ...justement non.

    j'ai bien utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for a in dir(worddoc):
    	print a
    et voici le résultat:
    _ApplyTypes_
    _FlagAsMethod
    _LazyAddAttr_
    _NewEnum
    _Release_
    __AttrToID__
    __LazyMap__
    __call__
    __cmp__
    __doc__
    __getattr__
    __getitem__
    __init__
    __int__
    __len__
    __module__
    __nonzero__
    __repr__
    __setattr__
    __setitem__
    __str__
    _builtMethods_
    _enum_
    _find_dispatch_type_
    _get_good_object_
    _get_good_single_object_
    _lazydata_
    _make_method_
    _mapCachedItems_
    _oleobj_
    _olerepr_
    _print_details_
    _proc_
    _unicode_to_string_
    _username_
    _wrap_dispatch_

  7. #7
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par Chris33 Voir le message
    'win32com'. De plus, je m'emmêle les pédales avec 'win32gui'; 'win32api' et 'win32con
    con = constant
    gui = Graphical User Interface, plus souvent appelé... GUI
    api = Application Programming Interface, plus connu sous le terme de... API
    com = Component Object Model, plus connu sous le nom de... COM

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Merci pour ces précisions.
    Mais qu'en est-il pour obtenir de l'aide?
    ne me donne pas d'information
    pas davantage

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2014, 10h34
  2. envoyer du texte sur un port
    Par esteban0013 dans le forum Langage
    Réponses: 0
    Dernier message: 23/01/2012, 17h04
  3. aide sur Microsoft Word Object Laibrary
    Par salrouge dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/05/2007, 10h09
  4. [VBA-W] Insérer texte sur toutes mes pages word
    Par STEPH69000 dans le forum VBA Word
    Réponses: 1
    Dernier message: 02/01/2007, 11h54
  5. Envoyer un fichier texte sur un port IP ?
    Par jnc dans le forum Web & réseau
    Réponses: 4
    Dernier message: 19/07/2005, 11h01

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