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 :

Lecture en colonne d'un fichier excel


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 57
    Points
    57
    Par défaut Lecture en colonne d'un fichier excel
    Bonjour,

    Je suis relativement débutant en python !
    J'explique mon problème :

    J'ai un fichier excel dans lequel j'ai un tableau :
    colonne A (y) colonne C (x)
    200 240
    250 300
    300 360
    400 480
    500 600
    etc etc
    . .
    . .
    . .

    Je souhaite rentrer une valeur stockée dans une variable : y.
    Ensuite, rechercher cette valeur dans la colonne A (autrement dit une boucle pour tester si y == (valeur de la case dans la colonneA)), puis créer une nouvelle variable x dans laquelle il y aura la valeur de la case colonne c correspondant (en ligne).

    J'ai déja la structure globale, c'est à dire la variable y.
    Mon problème repose sur la boucle de lecture (test) si y == (case de la colonneA)

    Je fais un exemple :

    y = 400
    recherche dans la colonne A
    x=480

    Je vous remercie de votre aide chers développeurs !

  2. #2
    Membre éprouvé

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

    En gros tu souhaite reproduire la fonction RECHERCHEV() d'excel, c'est ça?

    Ce fichier excel, comment le manipule tu? En l'ouvrant avec win32com? Ou exporte tu les données au format text, un csv?

    Est-ce que tu pourrais poster ce que tu as déjà fait, meme une fraction fonctionnele de ton code?

    Ju

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    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
    from tkinter import *
    import math
    import xlrd
     
     
    classeur = xlrd.open_workbook("Tableau diametre.xlsx")
    nom_des_feuilles = classeur.sheet_names()
    feuille = classeur.sheet_by_name(nom_des_feuilles[0])
     
    def repondre():
     
        affichage['text'] = (e1.get(), X, '3/2')
        prof=float(e1.get()) #a1
        y=float(e2.get())   #a2
     
        f=prof*(3/2)
        c=(4/3)
     
        print (f)
     
        if y <= 600:
            if ba.get()==1 :
                test = True
                #while test :
    Je souhaite simplement retrouver la valeur de ma variable y dans le colonne A
    puis décaler de 2 rang à droite afin d'avoir le x.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    657
    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 : 657
    Points : 1 157
    Points
    1 157
    Par défaut
    OK, c'est bien la fonction RECHERCHEV() dont tu parles.

    Je ne connais pas le module xlrd, peut-être que quelqu'un d'autre ici t'en parleras.

    Il y a des choses dans ton code que je ne peux que deviner:
    • e1
    • e2
    • ba


    Est-ce que ce sont des cellules?

    Le principe est plutôt simple à mon avis. Il faut se placer à la première cellule de la colonne A. On descend tant que la valeur de la cellule est non vide (tant qu'on est pas arrive à la fin en somme) et tant que la valeur de la cellule est différente de y. Si la valeur recherchée est touvée on récupère la valeur de la cellule voisine en colonne B.

    Dis-moi si je me trompe de raisonnement.

    Est-ce que tu peux "lire" le contenu d'une cellule à partir de ces coordonnées (i,j) ou uniquement à partir de son nom?

    Qu'est-ce qui se passe si la valeur n'est pas trouvée? Est-ce que tu peux prendre la valeur la plus proche?


    Ju

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    oui c'est exactement le raisonnement que j'ai mais que je n'arrive pas a appliquer.
    e1 et e2 sont des entrées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    e1 = Entry(Fenetre)
    e2 = Entry(Fenetre)
     
     
    e1.grid(row=3, column=1)
    e2.grid(row=4, column=1)
    ba est juste une case à cocher.

    Si la valeur y n'est pas trouvée dans la colonne, j'aimerais afficher un message d'erreur.

    Pour le moment j'arrive simplement à lire par exemple la case A1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ("A1: {}".format(feuille.cell_value(0, 0)))

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    657
    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 : 657
    Points : 1 157
    Points
    1 157
    Par défaut
    Ah oui, venant de tkinter.

    Ok, je peux malheuresement pas faire grand chose pour toi, je n'ai pas xlrd sur mon PC de bureau.

    Cependant il y une doc associé au module.

    Essaye ceci en créant un nouveau fichier.py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import xlrd
     
    classeur = xlrd.open_workbook("Tableau diametre.xlsx")
    nom_des_feuilles = classeur.sheet_names()
    feuille = classeur.sheet_by_name(nom_des_feuilles[0])
     
    cellule = feuille.cell(1,1)
    valeur = cellule.value
    print valeur, type(valeur)
    Assure toi qu'il y a quelque chose d'écrit dans la cellule A1 de la première feuille et dis-moi ce qu'il se passé.


    Ju


    PS: attention, xrld retourne un flottant meme si la valeur est un entier dans la cellule. Sur python 2.x 4/3=1 (entier)

  7. #7
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    Pas mal
    200.0 <class 'float'>

    C'est ok !
    J'ai trouvé ! merci à toi !!!

  8. #8
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    657
    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 : 657
    Points : 1 157
    Points
    1 157
    Par défaut
    Il n'y a pas de quoi!

    Je te conseille d'écrire une fonction qui prend en parameter la valeur recherchée, la feuille et la colonne dans laquelle elle se trouve et la colonne dans laquelle se trouve la valeur à retourner. Cette fonction te sors soit la valeur souhaitée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def recherche(sheet, value, col_src, col_dst):
        ...
        return val
    Comme cela tu pourras la reutiliser facilement. Poste la ici après.


    Bon courage

    Ju

  9. #9
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    Là je dois bien avouer que j'ai pas bien compris ! :o
    Pour le moment j'ai simplement fait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for z in range (0, 20) :
                    if (feuille.cell_value(z, 0)) == y :
                        print (feuille.cell_value(z, 0))
                        print (feuille.cell_value(z, 0+2))
                        print ('ok')

  10. #10
    Membre éprouvé

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

    Que ce passe-t-il si tu décide de faire cette recherche une autre fois, trois fois, 10000 fois? Si cette recherche à lieu dans une autre colonne? Si ta colonne à plus de 20 lignes? Si la valeur recherchée n'éxiste pas?

    J'aurais fait 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
    15
    def recherche_value(value, sheet, col_src, col_dst, bound):
        """Look for a value in col_src and return the corresponding value in
        col_dst"""
        for i in range(bound):
            if sheet.cell(i,col_src).value == value:
                return sheet.cell(i,col_dst).value
        return None
     
    wkb = xlrd.open_workbook("Tableau diametre.xlsx")
    shts = wkb.sheet_names()
    sheet = wkb.sheet_by_name(shts[0])
     
     
    print recherche(400.0, sheet, 0, 2, 20)
    # Doit retourner 480 (pas testé)
    Tu peux après complexifier la chose pour prendre en compte la possibilité de trouver une valeur approchée, ou faire une autre action s'il n'y a pas de valeur exacte, ou si la valeur n'est pas au bon format, ou si tu veux pouvoir débuter à partir d'une nouvelle ligne...

    C'est plus souple.


    Ju

    PS: Désolé pour l'orthographe, ce correcteur auto anglais commence à me les briser

  11. #11
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    Je te remercie !
    C'est parfait !!!

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

Discussions similaires

  1. Récupérer le chiffre de la colonne d'un fichier Excel
    Par mouaa dans le forum VBA Access
    Réponses: 7
    Dernier message: 21/02/2008, 16h25
  2. Réponses: 12
    Dernier message: 22/01/2008, 09h16
  3. parcours de lignes et colonnes d'un fichier excel
    Par guintolli dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/12/2007, 11h33
  4. Remplir les colonnes d'un fichier excel
    Par craryb dans le forum MFC
    Réponses: 3
    Dernier message: 14/03/2007, 12h37
  5. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00

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