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

Bibliothèques tierces Python Discussion :

Avec xlwt, est-il possible d'écrire dans un fichier Excel déjà existant?


Sujet :

Bibliothèques tierces Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Électromécanique
    Inscrit en
    décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Électromécanique

    Informations forums :
    Inscription : décembre 2015
    Messages : 3
    Points : 7
    Points
    7
    Par défaut Avec xlwt, est-il possible d'écrire dans un fichier Excel déjà existant?
    Bonjour,
    Je ne trouve pas le bouton "nouvelle discussion". Donc, j'écris ici.
    Trouver des réponses dans les tutoriels de ce site est un peu compliqué.
    Ou il n'y a pas ce que je cherche.
    Je programme en python, 2.7 dans l'éditeur Spyder, avec Windows 10.
    Mes questions sont :
    • Avec xlwt, peux-on écrire dans un fichier Excel existant? Si oui, comment? J'ai essayé mais ça me donne un erreur.
    • Le programme ci-joint en crée un pour exemple. Ce fichier vient de ce lien :https://pypi.python.org/pypi/xlwt. Je connais aussi le xlrd si ça peut aider.
    • Aussi, comment par exemple, écrire un tableau de 10 sur 10, avec les nombres de 0 à 100 ?


    Si vous avez des programmes utlisant xlwings, csv, et try-except, je suis preneur aussi.
    Merci de votre aide.
    Bonne soirée à tous.

    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
    # -*- coding: utf-8 -*-
    """
    Created on Tue Dec 22 10:27:00 2015
     
    @author: Alexis
    """
    import xlwt
    from datetime import datetime
     
    style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on',
        num_format_str='#,##0.00')
    style1 = xlwt.easyxf(num_format_str='D-MMM-YY')
     
    #book = open_workbook('line V2.xlsx')    # ouverture du fichier 
     
    wb = xlwt.Workbook()
    ws1 = wb.add_sheet('A Test Sheet')
     
    ws1.write(0, 0, 1234.56, style0)
    ws1.write(1, 0, datetime.now(), style1)
    ws1.write(2, 0, 1)
    ws1.write(2, 1, 1)
    ws1.write(2, 2, xlwt.Formula("A3+B3"))
     
    wb.save('example V2.xls')
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 1 659
    Points : 8 152
    Points
    8 152
    Par défaut
    Bonjour,

    Et bienvenue sur le forum,

    Alors commençont par quelques remarques générales:
    • Je te recommanderais plutot de partir sur du DEV en Python 3.X maintenant (sauf contrainte de compatibilité, mais ici ce n'est pas le cas)
    • XLRD sert uniquement pour lire les fichier excel, et xlwt sert uniquement à écrire/modifier les fichiers excel.
    • Je vois que ton fichier est du XLSX. Or le lien de la page Pypi de XLRD, qui renvoie vers la page officielle, semble signifier que XLRD et XLWT ne servent que pour du XLS, pas du XLSX. Le paquet recommandé serait plutot à priori le openpyxl, sur la meme page.


    Pour revenir à tes questions maintenant, je vais tâcher de répondre, ne pouvant tester le code (je suis sous Linux):
    • Il faudrait nous copier/coller l'erreur pour que nous puissions mieux analyser ce que tu obtient chez toi.
    • Pour le tableau, de manière basique, tu peux le faire avec une double boucle FOR. Voici un exemple (non teste) pour les nombres de 0 à 99:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
       
      for row in range(0,10,1):
          for column in range (0,10,1):
              value = (10 * row) + column
              ws1.write(row, column, value)
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Électromécanique
    Inscrit en
    décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Électromécanique

    Informations forums :
    Inscription : décembre 2015
    Messages : 3
    Points : 7
    Points
    7
    Par défaut Merci pour le tableau, mais comment écrire sur un .xls déjà existant?
    Rebonjour Monsieur,

    Merci de votre réponse!
    Excusez-moi de répondre seulement maintenant : avec les fêtes, c'est un peu compliqué!
    Tout d'abord, mon prof ne nous pas appris que le langage Python 2.7. Du coup, étant donné que je cherche
    une solution dans le cadre d'un travail, je ne peux travailler qu'avec du python 2.7.
    Et dans ce travail, le professeur nous demande de nous attarder uniquement sur xlrd, xlwt, et d'autres mais pas sur du dev.
    Pour revenir au code que j'ai posté, la ligne 14 servirait bien à ouvrir un fichier xlsx, mais elle est en
    commentaire grâce au caractère dièse (#). Cette ligne 14 est donc bien ignorée.
    Si je trouvais une code où je pouvais ouvrir un fichier, j'avais bien l'intention de prendre un fichier .xls .
    Concernant le tableau, j'ai rajouté vos lignes dans le code que j'ai envoyé plus haut : il fonctionne parfaitement.
    Merci beaucoup! Seulement, ce code crée un nouveau fichier, et j'aimerais pouvoir écrire le même
    tableau dans un fichier existant, c'est-à-dire un fichier déjà enregistré au préalable, qui contiendrait
    éventuellement déjà des données. Forcément, dans ce cas-là, je devrais, soit savoir où sont les cellules vides,
    soit autoriser la modification des cellules. Je ne sais pas s'il faut écrire une instruction qui servirait alors
    uniquement pour effacer ou modifier ces cellules où l'on voudrait écrire.
    Et toujours dans ce cas-là, je devrai à mon avis également spécifier le répertoire
    dans lequel se situe mon fichier existant.
    Ma question est donc :
    Connaissez-un code dans lequel on demande d'écrire le même tableau mais cette fois-ci dans un fichier déjà existant,
    qui n'est pas nouveau?

    Merci pour votre aide.
    Joyeuses fêtes.
    Au plaisir de vous relire,
    ProgrAlek

  4. #4
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 1 659
    Points : 8 152
    Points
    8 152
    Par défaut
    Citation Envoyé par ProgrAlek Voir le message
    Rebonjour Monsieur,

    Merci de votre réponse!
    Excusez-moi de répondre seulement maintenant : avec les fêtes, c'est un peu compliqué!
    Aucun soucis, c'est les vacances, parfaitement comprehensible . Je tourne moi meme fortement au ralenti.

    Citation Envoyé par ProgrAlek Voir le message
    Rebonjour Monsieur,
    Tout d'abord, mon prof ne nous pas appris que le langage Python 2.7. Du coup, étant donné que je cherche
    une solution dans le cadre d'un travail, je ne peux travailler qu'avec du python 2.7.
    C'est un peu dommage, mais moi meme jusque l'année scolaire passée j'enseignait le Python 2.7 à mes étudiants. Peut etre ne sait-il pas que Python 3.X est déclaré apte maintenant. Tu pourrais éventuellement en discuter avec lui, de manière constructive, mais c'est un autre sujet

    Citation Envoyé par ProgrAlek Voir le message
    Rebonjour Monsieur,
    Et dans ce travail, le professeur nous demande de nous attarder uniquement sur xlrd, xlwt, et d'autres mais pas sur du dev.
    Pour revenir au code que j'ai posté, la ligne 14 servirait bien à ouvrir un fichier xlsx, mais elle est en
    commentaire grâce au caractère dièse (#). Cette ligne 14 est donc bien ignorée.
    Si je trouvais une code où je pouvais ouvrir un fichier, j'avais bien l'intention de prendre un fichier .xls .
    Pour la ligne 14, je l'avais bien remarqué mais même en commentaire cela m'avait laissé l'impression qu'au final, tu semlblait vouloir manipuler du XLSX, j'ai donc préférer lever une alerte à ce sujet.

    Citation Envoyé par ProgrAlek Voir le message
    Rebonjour Monsieur,
    Concernant le tableau, j'ai rajouté vos lignes dans le code que j'ai envoyé plus haut : il fonctionne parfaitement.
    Merci beaucoup! Seulement, ce code crée un nouveau fichier, et j'aimerais pouvoir écrire le même
    tableau dans un fichier existant, c'est-à-dire un fichier déjà enregistré au préalable, qui contiendrait
    éventuellement déjà des données. Forcément, dans ce cas-là, je devrais, soit savoir où sont les cellules vides,
    soit autoriser la modification des cellules. Je ne sais pas s'il faut écrire une instruction qui servirait alors
    uniquement pour effacer ou modifier ces cellules où l'on voudrait écrire.
    Et toujours dans ce cas-là, je devrai à mon avis également spécifier le répertoire
    dans lequel se situe mon fichier existant.
    Ma question est donc :
    Connaissez-un code dans lequel on demande d'écrire le même tableau mais cette fois-ci dans un fichier déjà existant,
    qui n'est pas nouveau?

    Merci pour votre aide.
    Joyeuses fêtes.
    Au plaisir de vous relire,
    ProgrAlek
    Alors, comme deja dit precedemment, non je ne connais pas cette lib, car je ne tourne que sous Linux. Cependant, je pense que le comportement doit etre similaire à nombre d'autre lib à savoir l'utilisation de conteneur. Je m'explique. Lorsque tu fais un "wb = xlwt.Workbook()" dans ton code, en réalité, tu créé un conteneur. Il s'agit d'une sorte de variable tampon, que tu finit par écrire dans un fichier. C'est uniquement lorsque tu fait un "wb.save(" que tu crééé véritablement le fichier.

    Partant de ce principe, toute création modification que tu veux, doit se faire un niveau conteneur. De fait lea procedure doit etre la suivante:

    CREATION:
    -creation du conteneur
    -Ajout de tes entrees
    -sauvegarde (xlwt)

    MODIFICATION:
    -Creation d'un conteneur
    -Lecture du contenu de ton fichier (mise en mémoire dans le conteneur) (xlrd)
    -Modification du conteneur
    -sauvegarde du conteneur dans le fichier (xlwt)
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 545
    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 : 17 545
    Points : 30 269
    Points
    30 269
    Par défaut
    Salut,

    Citation Envoyé par ProgrAlek Voir le message
    Connaissez-un code dans lequel on demande d'écrire le même tableau mais cette fois-ci dans un fichier déjà existant, qui n'est pas nouveau?
    wlrd sait lire un fichier XL, xlwt sait écrire un nouveau fichier XL. Pour modifier le contenu d'un "fichier" existant (ajouter, supprimer), il faut utiliser xlutils.copy.

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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Électromécanique
    Inscrit en
    décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Électromécanique

    Informations forums :
    Inscription : décembre 2015
    Messages : 3
    Points : 7
    Points
    7
    Par défaut Ok, merci pour le pistes!!
    Ok, merci de m'avoir mis sur la piste!!
    Je peux toujours essayer.
    Mais selon wiztricks, xlwt ne peut être utiliser uniquement pour créer des nouveaux fichiers.
    Il dit que pour modifier un fichier déjà enregistré, on ne peut pas utiliser xlwt.
    En tout cas, moi, je comprend ça comme ça.
    Il me propose alors d'utiliser xlutils.copy. Merci à lui.
    Aussi, comment se fait -il que vous pouvez pas tester vos codes?
    Être sous Linux influencerait le fait que vous pouvez tester ou pas?
    Moi, j'ai installer Spyder comme éditeur. Il est téléchargeable tous les sytèmes d'exploitation.
    Vous pouvez si nécessaire le télécharger dans le bas de ce lien.
    https://www.continuum.io/downloads

    Merci beaucoup.

  7. #7
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 1 659
    Points : 8 152
    Points
    8 152
    Par défaut
    Salut,

    Merci à Wiztricks pour ces informations.

    Le soucis ne vient pas de Linux. Ce que tu manipule est des fichiers windows et je pensais, à tort à priori, qu'il fallait au moins microsoft office d'installé. La page Pypi indique bien qu'il n'y a nul besoin d'etre sous windows, et après essai chez moi, ton code fonctionne bien sous Linux également.

    J'ajoute également, que d'après la page officielle de xlwt et xlrd sont rassemblé dans la lib xlutils, tel que déjà indiqué par notre ami Wiztricks, et qu'à priori, il serait plutot conseillé de finir par utiliser openpyxl en lieu et place. Cette dernière lib couvre également les xlsx.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 545
    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 : 17 545
    Points : 30 269
    Points
    30 269
    Par défaut
    Citation Envoyé par deusyss Voir le message
    J'ajoute également, que d'après la page officielle de xlwt et xlrd sont rassemblé dans la lib xlutils, tel que déjà indiqué par notre ami Wiztricks, et qu'à priori, il serait plutot conseillé de finir par utiliser openpyxl en lieu et place. Cette dernière lib couvre également les xlsx.
    La page officielle dit:
    xlutils
    This package collects utilities that require both xlrd and xlwt, including the ability to copy and modify or filter existing excel files.
    NB: In general, these use cases are now covered by openpyxl!
    Dit autrement, pour utiliser xlutils, il faut avoir installé xlrd et xlwt.

    De plus ce qu'on peut faire avec (les "uses cases") est différent de ce qu'on peut faire avec openpyxl ne serait ce que parce que le format des fichiers supportés (XLS ou XL?X) est différent.


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

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

Discussions similaires

  1. [ASP.NET 2.0][C#] Comment écrire dans un fichier Excel ?
    Par Louisa dans le forum Accès aux données
    Réponses: 8
    Dernier message: 19/12/2012, 18h43
  2. Réponses: 11
    Dernier message: 14/09/2009, 17h10
  3. Réponses: 1
    Dernier message: 20/09/2007, 15h15
  4. [Excel] Écrire dans un fichier Excel existant
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 01/05/2006, 16h06
  5. lire / écrire dans un fichier excel au format xml
    Par crisflo dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 28/01/2006, 10h50

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