Bonjour,
Je voudrais votre aide pour exporter un QTableView vers un fichier Excel ou CSV.
Merci.![]()
Bonjour,
Je voudrais votre aide pour exporter un QTableView vers un fichier Excel ou CSV.
Merci.![]()
Bonjour,
J'ai déjà donné une méthode pour lire un QTableView ici:
https://www.developpez.net/forums/d1...-d-qtableview/
Une fois obtenue le liste de listes des données, la création du fichier csv pour importer dans Excel est facile. Avec le module csv, je suggère de passer par le container "Dialect" qui permet de configurer la création du csv pour Excel.
Il y a tout de même quelques particularités dans ce transfert dans Excel:
- les nombres entiers sont importés comme nombres, même s'il s'agit d'un code postal (en international, les codes postaux peuvent comporter des lettres, ce qui donne une mauvaise présentation: certains calés à droite, d'autre à gauche).
- les nombres flottants ne sont importés comme nombres que s'ils ont une virgule décimale (pour un Excel français).
- attention à l'encodage des chaines de caractères pour Excel en cas de caractères accentués (utf-8 ou cp1252 ?).
Il faut simplement en tenir compte dans la conversion.
Merci Tyrtamos pour votre réponse,
J'ai trouvé une autre solution plus facile, à mon avis, pour convertir mon QTableView en CSV par la méthode suivante :
Qu'est ce que vous en dit ?
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 ... table_clients = [] for lig in range(0, self.listeclients.rowCount()): # où self.listeclients est QSqlRelationalTableModel table_clients.append([]) # ajout d'une nouvelle ligne for col in range(0, self.listeclients.columnCount()): index = self.listeclients.index(lig, col) valeur = self.listeclients.data(index) table_clients[-1].append(valeur) # ajout d'une nouvelle valeur à la ligne en cours fields = ["ID","INTITULE","TEL"] filename = "Liste_Clients.txt" with open(filename, 'w', encoding='utf-8-sig', errors='ignore') as csvfile: csvwriter = csv.writer(csvfile, delimiter=';') csvwriter.writerow(fields) csvwriter.writerows(table_clients)
Merci
Bonjour,
En principe, on arrive pour écrire un fichier csv avec une "liste de listes", chaque sous-liste représentant les différents éléments d'une même ligne.
Voilà comment j'écrirais la partie écriture:
Je confirme mes remarques pour l'importation des fichiers csv dans Excel français:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import csv fields = [["ID","INTITULE","TEL", "12345", 12.456, "12,345"], ["ID2","Intitulé2","TEL2", "67890", 99.654, "78,321"]] filename = "Liste_Clients.csv" with open(filename, 'w', newline='', encoding='utf-8-sig', errors='ignore') as csvfile: csvwriter = csv.writer(csvfile, delimiter=';', dialect=csv.excel) for field in fields: # c'est là qu'on peut modifier certains éléments de la ligne csvwriter.writerow(field)
- les entiers comme "12345", même écrits avec des guillemets, sont compris comme des nombres entiers et donc calés à droite dans Excel.
- les flottants comme 12.456 sont compris comme des chaines de caractères et donc calés à gauche dans Excel.
- les flottants comme "12,345", forcément écrits avec des guillemets sous Python, sont compris comme des flottants et donc calés à droite dans Excel.
- le mot "Intitulé2" comportant un accent et écrit avec l'encodage "utf-8" est correctement restitué dans Excel.
Bonjour Tyrtamos,
J'ai pu exporter mon QTableView en fichier CSV, seulement, il y a un bémol je suis obligé de parcourir tout le tableau de haut en bas (Vertical Scroll Bar)
pour avoir l'ensemble des lignes exportées dans le fichier de sortie.
Même en utilisant en vain
Y a t'il une solution ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while self.model.canFetchMore(): self.model.fetchMore()
Bonjour,
Y a-t-il une clé étrangère en lien avec la table que tu veux lire?
Si oui, il faut aussi demander à ce que cette 2ème table soit chargée complètement avec fetchMore, en utilisant, bien sûr le modèle de cette 2ème table.
Partager