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 :

Excel: Modifier format d'une cellule [Python 2.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Excel: Modifier format d'une cellule
    Bonjour,

    Je suis débutant en python et je rencontre quelques problèmes dans la manipulation de données excel.
    Je m'explique, j'ai créé un script pour extraire des données d'un fichier .csv afin de les stocker dans un tableau excel.
    Le fichier csv contient du texte et des nombres. Lors de l'extraction toutes les données sont stockées en format texte y compris les nombres.

    Je cherche donc un moyen de convertir les cellules contenant les nombres (mais vu par excel comme du texte) en format numérique.

    Merci d'avance pour vos réponses.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    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 : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Même si le problème est bien expliqué, ce serait plus facile de te répondre avec si possible un bout de code et mieux encore, le nom du module que tu utilise pour manipuler Excel. Est-ce xlwt?

    Ju

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut Ju,

    En ce qui concerne les modules, j'utilise xlwt, xlrd, csv.
    Je suis ouvert à l'utilisation d'autre module si il le faut pour résoudre mon problème.

    Pour palier à mon problème, j'ai trouvé un petit script VBA (je sais pas si ça peut t'aider), je souhaiterai réaliser le même en python.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub convertToNum()
    Dim Tabl(), i As Long, j As Long
    Tabl = Range("D2:D16396")  <-- "j'aimerais récupérer la dernière ligne du tableau à la place du 16396"
    For i = LBound(Tabl, 1) To UBound(Tabl, 1)
        Tabl(i, 1) = CInt(Tabl(i, 1))
    Next
    Range("D2").Resize(UBound(Tabl, 1), 1) = Tabl
    End Sub

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    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 : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Ok, la première chose que j'essaierais c'est de convertir le texte en nombre avant l'écriture dans la cellule. Normalement si tu utilise la method write (comme ci-dessous) ça fonctionnera tout seul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    book = Workbook()
    sheet1 = book.add_sheet('sheet 1')
    sheet = book.get_sheet(0)
    sheet.write(0, 0, 4.5)
    Ensuite le type de cellule est exprimé avec xlrd ou xlwt par XL_CELL_TYPE. Ainsi une cellule contenant un nombre (float) aura comme type XL_CELL_NUMBER. On retrouve les types suivants:
    • Text --> XL_CELL_TEXT
    • Number --> XL_CELL_NUMBER
    • Date --> XL_CELL_DATE
    • Boolean --> XL_CELL_BOOLEAN
    • etc..


    Tu peux sans doute modifier le type de la cellule après coup grâce à des methods "set" de la classe "Row". Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    wb = Workbook()
    ws = wb.add_sheet('Sheet 1')
    ws.row(0).write(0, '4.5') # similaire normalement à ws.write(0,0, '4.5')
    ws.row(0).set_cell_number(1,'4.5')
    wb.save('Test.xls')
    Bon je n'ai rien testé de tout ça..

    Ju

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé avec le morceau de code que tu m'as donné et l'adaptant à differentes sauces mais rien n'y fait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while nbreDeLigne < nbreDeLigneMax:
    	for ligne in fichiercsv:
    		while nbreDeColonne < nbreDeColonneMax:
    			if nbreDeColonne == 3 & nbreDeLigne >= 4:
    				# 1) feuil1.row(nbreDeColonne).set_cell_number(nbreDeLigne,ligne[nbreDeColonne])
    				# En utilisant le module "Decimal"
    				# 2) feuil1.row(nbreDeColonne).set_cell_number(nbreDeLigne,Decimal(ligne[nbreDeColonne]))
    				# 3) feuil1.row(nbreDeColonne).write(nbreDeLigne,Decimal(ligne[nbreDeColonne]))
    				nbreDeColonne += 1
    			feuil1.write(nbreDeLigne,nbreDeColonne,ligne[nbreDeColonne])
    			nbreDeColonne += 1
    nbreDeLigne += 1
    nbreDeColonne = 0
    Ci-joint un imprime écran du résultat excel après traitement.

    Nom : Debug_forum.jpg
Affichages : 2820
Taille : 122,2 Ko

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    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 : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Je viens de tester mon deuxième bout de code avec success. Je ne peux pas uploader d'image depuis mon pc de bureau, dsl. Lance ce code pour t'en assurer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # -*- coding:Utf-8 -*-
     
    from xlwt import Workbook
     
    wb = Workbook()
    ws = wb.add_sheet('Sheet 1')
    ws.row(0).write(0, '4.5') 
    ws.row(0).set_cell_number(1,'4.5')
    wb.save('Test.xls')
    Que ce passe-t-il si tu remplace ton code par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    wb = Workbook()
    feuil1 = wb.add_sheet('feuil1')
     
    while nbreDeLigne < nbreDeLigneMax:
        for ligne in fichiercsv:
            while nbreDeColonne < nbreDeColonneMax:
                if nbreDeColonne == 3 & nbreDeLigne >= 4:
                    nbreDeColonne += 1
                feuil1.row(nbreDeLigne).set_cell_number(nbreDeColonne,ligne[nbreDeColonne])    
                nbreDeColonne += 1
    nbreDeLigne += 1
    nbreDeColonne = 0
     
    wb.save('Test.xls')
    As tu essayé d'écrire un nombre directement dans la cellule comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    wb = Workbook()
    sheet1 = wb.add_sheet('sheet 1')
    sheet = wb.get_sheet(0)
    sheet.write(0, 0, 4.5)
    sheet.write(0, 1, '4.5')
    wb.save('Test.xls')
    Cela fonctionne très bien chez moi. Dans ce cas il serait peut-être plus simple de convertir tes données avant de les écrire dans ton document excel. Une façon de faire cela est d'utiliser la function eval().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print eval('4.5')
    >>> 4.5
    Ju

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut Ju,

    Effectivement les morceaux de codes que m'a donnés marchent!
    Après avoir retourné mon code dans tous les sens, j'ai trouvé l'erreur qui empêchait que cela fonctionne correctement.

    Merci pour ton aide!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2008, 22h39
  2. Réponses: 3
    Dernier message: 16/10/2007, 16h25
  3. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  4. VB6 - Definir le format d une cellule sur Excel
    Par Zaal dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/07/2006, 14h22
  5. Modifier Font d'une cellule dans Excel
    Par nmathon dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/05/2005, 14h42

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