Ecrire sur fichier Excel existant
Fermé
fabien
-
20 août 2020 à 09:20
WillemVDD Messages postés 6 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 23 août 2020 - 22 août 2020 à 23:51
WillemVDD Messages postés 6 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 23 août 2020 - 22 août 2020 à 23:51
A voir également:
- Remplir un fichier excel avec python
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Liste déroulante excel - Guide
- Ouvrir un fichier .bin - Guide
1 réponse
WillemVDD
Messages postés
6
Date d'inscription
vendredi 25 mai 2018
Statut
Membre
Dernière intervention
23 août 2020
22 août 2020 à 23:51
22 août 2020 à 23:51
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 :
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
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) :
Puis en entrant dans le programme principal :
et dans la boucle :
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.
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.