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 :

xlwt Formula Excel


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut xlwt Formula Excel
    Bonjour à tous,

    Je voudrai savoir si il est possible d'écrire la formule que l'on veut avec xlwt.Formula, je n'arrive pas à trouver la documentation de toutes les formules possibles car visiblement elles n'y sont pas toutes car je n'arrive pas à faire fonctionner celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb.get_sheet(0).write(10,1,Formula('=LASTSAVED()'),style)
    Dans le but de changer la date de la cellule si le fichier est modifié puis enregistrer.

    Merci d'avance,

    Valentin

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut
    Bon après avoir continué de chercher sur le net, cette formule n'est pas directement intégrée dans Excel donc à mon avis pas non plus dans xlwt.Formula.
    Voici le code VBA de la formule LASTSAVED() (on l'ajoute en module)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function LastSaved() As Date
        Application.Volatile
        LastSaved = ThisWorkbook.BuiltinDocumentProperties(12)
    End Function
    J'utilise xlutils.copy pour mettre en cache un Excel déjà existant pour le modifier ensuite avec xlwt, cependant xlutils.copy ne prend pas les formules visiblement et les modules non plus pour ça :

    il faudrait plutot savoir :
    •Ajouter un module via python dans un excel à l'aide de xlwt (qui contiendrait le code VBA).
    •Pour ensuite écrire la formule avec Formula.

    Je ne sais pas si mon raisonnement est bon ... Si quelqu'un sait comment rajouter un code VBA avec python sur un fichier Excel je suis prenneur, je vais faire des recherches de mon coter.

    Merci d'avance,

    Valentin.


    EDIT : j'ai touvé ça sur le net, le problème c'est qu'il n'y avait pas beaucoup d'explications..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    xl = win32.gencache.EnsureDispatch('Excel.Application')
    xl.Visible = True
    ss = xl.Workbooks.Add()
    sh = ss.ActiveSheet
     
    xlmodule = ss.VBProject.VBComponents.Add(1)  # vbext_ct_StdModule
     
    sCode = '''sub VBAMacro()
           msgbox "VBA Macro called"
          end sub'''
     
    xlmodule.CodeModule.AddFromString(sCode)
    Je l'ai un peu adapté à mon programme :
    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
            xl = win32.gencache.EnsureDispatch('Excel.Application')
            xl.Visible = True
            ss = xl.Workbooks.Open(name)
            sh = ss.ActiveSheet
     
            xlmodule = ss.VBProject.VBComponents.Add(1)  # vbext_ct_StdModule
     
            sCode = '''Function LastSaved() As Date
        Application.Volatile
        LastSaved = ThisWorkbook.BuiltinDocumentProperties(12)
    End Function'''
     
            xlmodule.CodeModule.AddFromString(sCode)
            print(name)
            wb.get_sheet(0).write(10,1,'=LASTSAVED()',style)
            wb.save(name)#sauvegarde du cache en fichier excel
    Il créé bien le code VBA dans un module Excel mais :
    •Le fichier s'ouvre (avec le Workbook.open) mais je ne sais pas comment faire autrement.
    •La dernière ligne plante il ne veut pas sauvegarder le fichier.
    Message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        f = open(file_name_or_filelike_obj, 'w+b')
    PermissionError: [Errno 13] Permission denied: 'C:/Users/ws1701/Desktop/azeeterrt.xls'
    •Si on reprend le même fichier (qu'on fait sauvegarder remplacer) il créé une deuxième fois le module donc on se retrouve avec 2,3,4 même module dans un fichier.

    Code supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            rb = open_workbook(("chemin d'acces au excel calque"), formatting_info=True, on_demand=True)
            wb = copy(rb)#mettre dans cache le fichier pour le modifier
    rb est le fichier que j'utilise comme calque pour le compléter ensuite notamment avec cette formule LASTSAVED()

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Il sera sans doute plus simple d'utiliser EXCEL via pywin32.

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

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    J'ai du EDIT mon message en même temps que votre réponse

    Merci pour votre temps,

    Valentin

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut
    Problème résolue !

    Alors enfaite c'est que j'utilisai 2 module différent pour écrire dans le même fichier donc forcément y'avait des problèmes de lecture seule.

    Le désavantage de xlwt est qu'il ne conserve pas les cellules comme elle était avant ou même les modules ect ...
    Donc on fait ce que l'on a faire avec xlwt notamment mettre la cellule sous format date car la fonction LASTSAVED() marche avec une cellule de ce format.
    Ensuite on save le workboot xlwt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb.save(name)#sauvegarde du cache en fichier excel
    Et on peut commencer avec pywin32 qui lui garde les cellules comme elles étaient donc pas besoin de remmettre un format date.
    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
            excel = win32.gencache.EnsureDispatch('Excel.Application')
            excel.Visible = False #C'est là ou on peut modifier si on voit apparaitre le fichier excel ou non True il s'ouvre False ne s'ouvre pas
            xls = excel.Workbooks.Open(name)
     
            xlmodule = xls.VBProject.VBComponents.Add(1)  # vbext_ct_StdModule
     
            sCode = '''Function LastSaved() As Date
        Application.Volatile
        LastSaved = ThisWorkbook.BuiltinDocumentProperties(12)
    End Function'''
     
            xlmodule.CodeModule.AddFromString(sCode)
            xls.Worksheets("Project risk analysis").Range("B11").Value='=LASTSAVED()'
            xls.Save()
            xls.Close()
            excel.Quit()
    Voilà voilà, j'espère que cela pourra servir à quelqu'un

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2010, 17h05
  2. Generation Excel Formula
    Par Knightrider dans le forum VB.NET
    Réponses: 0
    Dernier message: 13/10/2009, 18h59
  3. utilisation fonction excel / .Formula
    Par pythagore3_14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2008, 14h48
  4. Réponses: 2
    Dernier message: 15/05/2008, 10h45
  5. Name et formula dans VBA Excel
    Par khadba dans le forum Windows
    Réponses: 1
    Dernier message: 20/02/2007, 11h37

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