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 :

Python et template word


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Par défaut Python et template word
    Bonjour,

    Je débarque depuis peu sous Python, pas un expert de la programmation de manière générale, mais j'apprécie apprendre "par le besoin" d'un projet.

    Je suis sous Windows, j'utilise une interface wxPython, et j'aimerai réussir à faire un lien entre une base de donnée SQlite et un template word.
    Cela me permettrait de charger un fichier client, et ainsi remplir les champs "nom", "prénom", "société" etc... d'un bon de livraison, d'un bon de retour ou autre, et pourquoi pas de le sauver et l'imprimer.
    Je parle de "template word", peut être à tort, mais je souhaite conserver la structure de mon document de référence (logo, en-tête, etc...). Le format .doc n'est peut être pas le meilleur choix (pour l'ouverture sous d'autres plates-formes), vous avez peut être une suggestion ?

    Merci d'avance pour vos conseils

    Steph

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut
    Bonjour

    le format pdf serait plus approprié, fidéle à l'impression et multi plateforme.

    Je connais pas les fonctions wxpython pour le faire, travaillant avec pyqt et ses fonctionnalités d'impression en pdf.
    Avant j'utilisais le module reportlab pour faire des impressions pdfs, peut être qu'il y a mieux depuis le temps

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Effectivement, word n'est sans doute pas le meilleur choix si tu veux que ton code soit multi-plateforme.

    Cependant, sur windows, tu peux "assez" facilement créer, éditer, sauvegarder des documents .doc grâce au module win32com. C'est une usine à gaz mais c'est possible.

    Voici un blog en anglais qui présente un très simple exemple:

    http://www.blog.pythonlibrary.org/20...using-pywin32/

    Il existe des alternatives pour rédiger des document sous l'extension .rtf (je doute que cela te suffise), au format pdf (reportlab comme cité avant, mais sous license il me semble), ou encore directement en latex + compilation.

    Ju

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Par défaut
    Merci pour vos réponses,

    Effectivement, en PDF il y a quelques avantages, niveau compatibilité. Néanmoins il faudrait que je trouve un moyen de mettre en forme le document.
    J'avais effectivement pensé au RTF, je vais faire quelques essais avec PyRTF...
    Egalement, le format dot, savoir si je peux l'ouvrir avec Python.
    Bref, je vais creuser encore un peu !

  5. #5
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut word
    Bonjour à tous,
    J'utilise des modèles word avec python et cela fonctionne très bien (500 doc créés par mois).
    pour cela j'utilise des documents word et des mots clés:
    Exemple : {nom} qui est remplacé par son contenu "Dupont".

    Je t'ai créé une classe simplifiée qui fonctionne.
    Pour cet exemple il faut que tu crée un doc word (modele-1.docx) avec une ligne du type :
    Bonjour je m’appelle {nom}
    A toi de mettre en place le remplacement de chaque mot clé.

    Cordialement

    Alexandre

    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
    51
    52
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import win32com.client as win32
     
    class Docword():
        # Définition des constantes de class pour les paramètres de commande pywin32
        wdReplaceNone=0
        wdReplaceOne=1
        wdReplaceAll=2
        wdFindContinue=1
        wdAllowOnlyFormFields=2
        NoReset=True
     
        #pour close/save :
        wdDoNotSaveChanges=0
        wdSaveChanges=-1
     
        wdCharacter=1
        wdCell=12
        wdLine=5
     
        wdAlignLeft=0
        wdAlignCenter=1
        wdAlignRight=2    
        def __init__(self,nom_modele,nom_doc_finale):
            self.nom_modele=nom_modele
            self.nom_doc_finale=nom_doc_finale
            self.w = win32.gencache.EnsureDispatch('Word.Application') # Démarrage de word
            self.w.Visible = False # le fichier est non visible
            self.doc = self.w.Documents.Open(self.nom_modele) 
     
        def chRemplAll(self, oldchaine, newchaine=''):
            """
            oldchaine = chaine a remplacer / string to replace
            newchaine = chaine de remplacement / string for replace
            """
            sel = self.w.Selection
            sel.ClearFormatting()
            sel.Find.Text = oldchaine
            sel.Find.Forward = True
            newchaine=newchaine.replace('\n','\r')
            sel.Find.Execute( oldchaine,False,False,False,False,False,True,self.wdFindContinue,False,newchaine,self.wdReplaceAll)
     
        def close_doc(self):
            self.doc.Protect (self.wdAllowOnlyFormFields,self.NoReset) #Protection
            self.doc.SaveAs(self.nom_doc_finale) # Sauvegarde du ficher
            self.doc.Close(0, 1) # 0 = Pas de changement, 1 = original format
     
    d=Docword(r"D:\python\forum\modif-word\modele-1.docx",r"D:\python\forum\modif-word\doc-final.docx")
    d.chRemplAll("{nom}","Dupont")
    d.close_doc()
    print "fin"

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Alexdevl,

    Sympa l'exemple!

    Ju

  7. #7
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Petite question. A quoi correspondent les variables suivantes:

    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
    # Définition des constantes de class pour les paramètres de commande pywin32
        wdReplaceNone=0
        wdReplaceOne=1
        wdReplaceAll=2
        wdFindContinue=1
        wdAllowOnlyFormFields=2
        NoReset=True
     
        #pour close/save :
        wdDoNotSaveChanges=0
        wdSaveChanges=-1
     
        wdCharacter=1
        wdCell=12
        wdLine=5
     
        wdAlignLeft=0
        wdAlignCenter=1
        wdAlignRight=2
    Certaines semblent plutôt évidentes (wdAlignLeft par exemple), il me semble qu'elles ne sont pas utiliser par la suite (sauf pour quelques unes comme wdFindContinue).

    Pour finir (oui ça fait deux questions), je ne saisi pas la nature de tous les arguments de la méthode Execute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sel.Find.Execute( oldchaine,False,False,False,False,False,True,self.wdFindContinue,False,newchaine,self.wdReplaceAll)
    Si tu as plus de billes sur le sujet je serais très intéressé. Peut-être une reférence ou un lien. Mes propres recherches aboutissent presque toutes sur MSDN ou d'autres forums.

    Ciao,

    ju

Discussions similaires

  1. [VSTO] Template Word pour facture client
    Par ragnarokr dans le forum Visual Studio
    Réponses: 1
    Dernier message: 04/11/2007, 12h42
  2. Réponses: 0
    Dernier message: 24/07/2007, 13h22
  3. [Scientific Word] Reproduire template Word
    Par medchok dans le forum Mise en forme
    Réponses: 1
    Dernier message: 11/10/2006, 08h47
  4. Utilisation de template word avec ADO en VBA
    Par 24 faubourg dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/12/2005, 19h41
  5. Ouverture d'un template Word depuis Excel
    Par modus vivendi dans le forum VBA Word
    Réponses: 1
    Dernier message: 14/08/2005, 10h29

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