Ecrire sur fichier Excel existant

[Fermé]
Signaler
-
Messages postés
6
Date d'inscription
vendredi 25 mai 2018
Statut
Membre
Dernière intervention
23 août 2020
-
Bonjour,
bonjour

je suis un vrai débutant dans le langage Python. Alors, je vous demanderai s'il vous plait d’être précis pour éviter que je sois trop largué Merci d'avance

voila je sais comment compléter un fichier excel existant. Moi j'aimerais que mon script soit capable de lire une colonne et dés qu'il trouve le mot cherché, il va alors à cette ligne et aller dans une nouvelle colonne pour ajouter un mot souhaité.
Je sais pas du tout comment faire.
Est ce quelqu'un a une idée ?

Merci d'avance

1 réponse

Messages postés
6
Date d'inscription
vendredi 25 mai 2018
Statut
Membre
Dernière intervention
23 août 2020

Bonjour,

Je ne suis pas sûr de comprendre ce que tu veux, mais voilà l’architecture que je propose : tout d’abord récupérer les données du fichier Excel dans une variable matrice du programme, ensuite les traités sous cette forme, puis les réenregistrer dans un fichier Excel.

Pour ce qui de la première étape, je te propose une fonction toute faite :
def lecteurDonnees(filename,n,entete):
    f=open(filename,'r')
    i=0
    while i<entete:
        f.readline()
        i=i+1
    data=[]
    for i in range(0,n):
        data.append([])
    for ligne in f:
        valeur=ligne.split()
        for i in range(0,n):
            data[i].append(valeur[i])
    return data

Les arguments filename, n, entete sont respectivement : le nom du fichier (ou adresse complète de l'emplacement du fichier dans le cas où le fichier ne se trouve pas dans le même répertoire que le code python), le nombre de lignes totale à lire, et le nombre de lignes d'entêtes à sauter (typiquement les infos sur le contenu du fichier, si il n'y en a pas, mettre 0).

En modifiant le contenue de [] dans la ligne 9 tu peux choisir quoi mettre en cas de case vide dans le tableur, et en modifient le contenue de la .split() dans la ligne 11 tu peux choisir quel est l’élément séparateur entre les éléments de chaque ligne de ton fichier (utile si la fonction sert à lire autre chose que des fichiers .xls .csv, comme des .txt).
(Si il s'agit de valeur numérique ne pas oublier de remplacer la ligne 13 par
data[i].append(float(valeur[i]))
).

Grace à cette fonction, tu récupère une matrice (liste de liste) qui contient l'entièreté des données du fichier Excel. Pour ce qui est de lire cette matrice façon double boucle imbriqué, chercher un élément et la modifier, je pense que tu sais largement comment faire si tu en es à travailler sur des fichiers Excel.

Ensuite, il ne reste plus qu’à enregistrer cette nouvelle matrice modifier sous forme d’un fichier Excel. Pour réduire le temps de calcul, il peut être de bon ton de profiter de la double boucle de l’étape précédente, afin de minimiser le temps de calculs. Le plus simple me semble d’utiliser la librairie xlwt, tu trouveras toute les infos / tutos que tu veux sur internet.

Parenthèse
Je ne sais pas quel est ton projet, mais je ne peux que t’inviter a plutôt utiliser des fichiers au format .csv, ou .txt, beaucoup plus répandu et facile à utiliser que les .xls. Avec typiquement un sous-programme comme suivant (je l'utilise depuis des années) :
# -*- coding: utf-8 -*-
import os

class EnregistreurDonnees:
    '''
    Enregistreur de données experimentales
    '''
    def __init__(self,filename,entete):
        if type(filename)!=str:
            filename='nonamefile'
        if type(entete)!=str:
            entete=''
        self.filename=filename
        self.entete=entete
        try :
            os.remove(self.filename)
            print('fichier supprimé')
        except :
            print('nouveau fichier')
        f=open(self.filename,'w')
        f.write(self.entete)
        f.close()
        return
    
    def enregistreur(self,data):
        f=open(self.filename,'a')
        f.write(str('\n')+str(data))
        f.close()


Puis en entrant dans le programme principal :
import EnregistreurDonnees as ed
fichier=ed.EnregistreurDonnees('nom_du_fichier.txt','Une Entête, si besoin ')


et dans la boucle :
fichier.enregistreur(data)
.
Fin de la Parenthèse


Voilà j’espère que je t’ai aidé, n’hésite pas à me demander si tu ne comprends pas quelque chose, ou que tu as besoin de précision.