Se rendre au contenu
Icône de Export Excel mis en forme — totaux vivants et formats conservés

Export Excel mis en forme — totaux vivants et formats conservés

par Dyonysos
Gratuit Odoo 20 Module Contrôle qualité : Vérifiée OPL-1 (propriétaire Odoo)

Formatted Excel XLSX Export for Odoo list views — export any Odoo list to a real workbook: typed dates, currency formats, frozen header, autofilter and a totals row written as live SUBTOTAL formulas that recalculate when you filter in Excel. Reusable export templates per model, added to the list Act

Captures d'écran

Export Excel — 49 €

Un classeur, pas un CSV déguisé

Exportez n'importe quelle liste Odoo vers un classeur réellement mis en forme : dates typées, formats monétaires, en-tête figé, filtre automatique — et une ligne de totaux écrite en formules SUBTOTAL, qui se recalculent quand vous filtrez dans Excel. Odoo 20 Community.

Ce module n'émet aucun appel sortant. Tout se passe dans votre serveur : rien ne part vers un service tiers, aucune clé à obtenir, aucun compte à créer. C'est pourquoi il fonctionne aussi bien sur Odoo Online, où les appels sortants sont interdits, que sur Odoo.sh et On Premise.

Odoo 20 Community — On Premise✔
Odoo.sh✔
Odoo Online (SaaS) — aucun appel sortant n'est émis✔

Le constat

L'export natif d'Odoo écrit des valeurs. Le fichier s'ouvre dans Excel, et c'est à peu près tout ce qu'on peut en dire : la date y est un texte que le tableur ne sait ni trier ni soustraire, le montant un nombre sans devise, le booléen un « True », et le total qui s'affichait au bas de la vue liste a purement disparu. Celui qui reçoit le fichier refait la mise en forme à la main — et la refait encore au prochain export. C'est un travail qui revient toutes les semaines et que personne ne compte.

SUBTOTAL, et non SUM

La ligne de totaux n'est pas une valeur calculée au moment de l'export : c'est une formule. Et le choix de la fonction est le cœur du produit.

🔢

Une valeur figée ment

Un total calculé en Python et écrit dans la cellule est juste une seconde, puis faux dès le premier filtre. Un total faux est pire qu'un total absent : il se lit comme un résultat.

➕

SUM ment aussi

SUM additionne toute la plage, y compris les lignes masquées par le filtre. Il donne donc la même réponse avant et après filtrage — silencieusement fausse.

🔎

SUBTOTAL suit le filtre

SUBTOTAL ignore les lignes masquées. Filtrez sur un client dans Excel : le total se recalcule pour ce client seul. C'est ce que le module vous vend.

Total demandéFormule écriteCe qu'elle calcule
Somme=SUBTOTAL(9;B2:B15)l'addition des seules lignes visibles
Moyenne=SUBTOTAL(1;B2:B15)la moyenne des lignes visibles
Nombre de valeurs=SUBTOTAL(3;B2:B15)le compte des cellules non vides visibles

Une somme sur une colonne de texte est refusée à l'enregistrement, pas à l'export. Excel rendrait zéro, et l'utilisateur découvrirait le problème trois semaines plus tard devant un classeur qui ment. La garde est posée là où elle s'apprend.

Un modèle d'export qui se retient

La liste des modèles de classeur : trois lignes — Pays et indicatifs téléphoniques sur le modèle Pays, Devises en service sur Devise, Annuaire des clients sur Contact — avec les colonnes Dans le menu Action et Ligne de totaux

Paramètres → Classeurs Excel → Modèles de classeur. Trois modèles, chacun rattaché à un modèle Odoo : Pays et indicatifs téléphoniques sur Pays, Devises en service sur Devise, Annuaire des clients sur Contact. La colonne Dans le menu Action montre l'interrupteur vert sur les deux modèles posés dans le menu, et gris sur « Devises en service », défini mais volontairement non posé. La colonne Ligne de totaux est cochée sur les trois.

Les colonnes, leur ordre et leurs totaux

La fiche du modèle Annuaire des clients : portée à gauche, mise en forme à droite, onglet Colonnes avec quatre lignes — Nom, Ville, Pays, Latitude — et leurs totaux

La fiche du modèle Annuaire des clients. À gauche la portée — modèle Odoo Contact, nom technique res.partner, fichier annuaire_clients. À droite les trois réglages de mise en forme, tous cochés : Figer la ligne d'en-tête, Filtre automatique, Ligne de totaux. En bas, l'onglet Colonnes : quatre lignes réordonnables par glisser-déposer, chacune avec son champ, son type lu automatiquement (caractère, many2one, nombre flottant), le titre écrit dans le classeur, le total et la largeur. La colonne Nom porte un Nombre de valeurs, la colonne Latitude une Somme, les deux autres aucun total.

L'export est là où vous regardez vos lignes

Un bouton Poser dans le menu Action suffit : le modèle s'accroche lui-même à la liste correspondante. L'acheteur n'apprend pas un menu technique — il retrouve son export dans le menu Actions, là où il travaille déjà.

La liste des contacts, quatorze lignes cochées, le menu Actions ouvert montrant l'entrée Exporter en Excel — Annuaire des clients aux côtés des entrées natives

La liste des contacts, 14 sélectionné(s), menu Actions ouvert. Sous les entrées natives d'Odoo — Exporter, Dupliquer, Archiver, Désarchiver, Supprimer, Fusionner — figure « Exporter en Excel — Annuaire des clients », posée par le modèle. Elle porte le nom du modèle, de sorte que plusieurs exports du même type d'enregistrement restent distinguables.

Le classeur, en un clic

La fenêtre Classeur produit : modèle d'export Annuaire des clients, 14 lignes à exporter, et le fichier annuaire_clients.xlsx prêt au téléchargement

La fenêtre Classeur produit rappelle le modèle retenu et le nombre de lignes — ici 14, exactement la sélection — puis rend annuaire_clients.xlsx, prêt au téléchargement. Aucune ligne cochée ? Le module refuse et le dit : il n'exporte jamais « tout » à votre insu.

Chaque colonne a le type qu'elle doit avoir

Champ OdooCe qui est écrit dans la cellulePourquoi
Date, date-heureune vraie date, jj/mm/aaaaExcel sait la trier et la soustraire ; un texte, non
Monétaireun nombre au format de sa deviseun montant sans devise n'est qu'un nombre
Booléen« Oui » ou « Non »« True » n'est pas une réponse lisible
Many2one videune cellule videjamais « False », la faute la plus visible d'un export fait à la main
Sélectionle libellé« Facture », et non invoice
Nombre valant zéroun zéroconfondre zéro et vide fait mentir la colonne sur les lignes les plus intéressantes

Ce qui ne peut pas être juste est dit

Une colonne monétaire n'a qu'un format de cellule ; une liste multidevise en a plusieurs. Il n'existe aucune façon d'avoir raison — il en existe une d'être honnête. Le classeur garde tous les montants exacts, applique le format de la devise retenue, et affiche l'avertissement à l'écran avant le téléchargement : vous êtes prévenu avant d'envoyer le fichier à votre comptable, et non après. L'avertissement ne se déclenche que lorsqu'il y a réellement plusieurs devises : une alerte permanente est une alerte qu'on cesse de lire.

Le module s'installe même sans xlsxwriter

Quand la bibliothèque xlsxwriter manque, trois conduites sont possibles et deux sont malhonnêtes. Refuser l'installation punit l'acheteur pour un manque qu'il peut combler en une minute. Livrer un CSV en silence lui fait croire qu'il a son classeur. Seule la troisième se défend : produire le CSV et l'annoncer — dans un bandeau à l'écran, avant l'export. C'est pourquoi la bibliothèque n'est délibérément pas déclarée dans external_dependencies, une déclaration qui bloquerait l'installation. Un test vérifie qu'elle n'y est pas, pour que personne ne l'y remette par réflexe.

Éprouvé, et éprouvé contre soi-même

37 tests, aucun échec. Les assertions décisives lisent le XML du classeur décompressé à la main : un XLSX est une archive ZIP, et une formule y apparaît en clair. Aucune bibliothèque tierce ne peut donc neutraliser le test qui garde la promesse centrale.

Chaque règle a ensuite été cassée volontairement pour vérifier que les tests tombent : SUBTOTAL remplacé par SUM (4 tests tombés), la formule remplacée par une valeur figée (4), le zéro confondu avec le vide (1), l'avertissement de devises supprimé (1), le repli CSV rendu silencieux (2). La première version du test sur le zéro ne tombait pas — elle cherchait une valeur dans toute la feuille et trouvait l'indice de chaîne partagée de l'en-tête. Elle a été réécrite pour viser la cellule et vérifier son type. Un test qui ne tombe pas quand on casse sa règle ne garde rien.

L’application en mouvement

Le module en marche, enregistré dans le vrai client Odoo 19 : les modèles de classeur, le modèle « Annuaire des clients » (fiche), le modèle « Devises en service » (fiche) puis les modèles de classeur. Ce n’est pas un montage — ce sont les trames du navigateur sur le module livré, pris sur sa propre base.

Vidéo MP4 — 225 ko, 1280 px, 3.3 s, 4 écrans. Une amorce animée est aussi livrée en GIF (380 ko, 560 px) pour les contextes qui n’affichent pas la balise vidéo.

Amorce animée du parcours de dyo_xlsx_liste
Amorce GIF — 380 ko. Enregistrement réel du client Odoo 19 sur une base dédiée à ce module, avec les données de démonstration livrées avec lui.

Ce que le module ne fait pas

Il n'est pas un tableur dans Odoo : le tableur natif d'Odoo est une fonctionnalité Enterprise, et ce module ne la reproduit pas. Il ne fait pas de tableau croisé dynamique, ne réimporte pas les classeurs modifiés, ne touche pas aux rapports PDF et n'envoie rien nulle part. Il exporte une liste, bien.

DYONYSOS — welcome@dyonysos.fr
Odoo 20 Community · licence OPL-1 · guide utilisateur et documentation technique fournis avec le module.

Export Excel mis en forme — totaux vivants et formats conservés — capture 1
Export Excel mis en forme — totaux vivants et formats conservés — capture 1
Export Excel mis en forme — totaux vivants et formats conservés — capture 2
Export Excel mis en forme — totaux vivants et formats conservés — capture 2
Export Excel mis en forme — totaux vivants et formats conservés — capture 3
Export Excel mis en forme — totaux vivants et formats conservés — capture 3
Export Excel mis en forme — totaux vivants et formats conservés — capture 4
Export Excel mis en forme — totaux vivants et formats conservés — capture 4
Export Excel mis en forme — totaux vivants et formats conservés — capture 5
Export Excel mis en forme — totaux vivants et formats conservés — capture 5

Ce que l'application ne fait pas

  • Il n'est pas un tableur dans Odoo : le tableur natif d'Odoo est une fonctionnalité Enterprise , et ce module ne la reproduit pas. Il ne fait pas de tableau croisé dynamique, ne réimporte pas les classeurs modifiés, ne touche pas aux rapports PDF et n'envoie rien nulle part. Il exporte une liste, bie
  • DYONYSOS — welcome@dyonysos.fr Odoo 20 Community · licence OPL-1 · guide utilisateur et documentation technique fournis avec le module.

Applications du magasin nécessaires

Aucune.

Modules Odoo Community utilisés

base

SérieVersionÉtatPubliée le
20.020.0.1.0.0 Disponible 02/10/2026
19.019.0.1.0.1 Disponible

Fiche générée depuis le code de l'éditeur (dépôt privé, branche 20.0) : le code source n'est pas publié.

Contrôle automatique du magasin (distinct de l'éditeur), appliqué à toutes les applications. Conforme.

ContrôleRésultatEffet si absent
Manifeste lisible sans exécution conforme bloquant
Licence reconnue (OPL-1) conforme bloquant
Aucune dépendance vers Odoo Enterprise conforme bloquant
Aucun import de code Enterprise conforme bloquant
Aucun en-tête de licence Enterprise conforme bloquant
Icône static/description/icon.png conforme déclasse
Description (static/description/index.html ou README) conforme déclasse
Tests automatisés (tests/test_*.py) conforme déclasse
Traduction française (i18n/fr.po) conforme info
Section « Ce que le module ne fait pas » conforme info
Titre de 70 caractères au plus (63 actuellement) conforme info
Résumé en français absent info

Guide d'utilisation — Export Excel mis en forme

Ce guide s'adresse à celui qui utilisera le module au quotidien, et à celui qui le paramètre. Il ne demande aucune connaissance technique.


1. Ce que le module change

Odoo sait déjà exporter une liste. Le fichier obtenu s'ouvre dans Excel, mais il ne contient que des valeurs brutes : les dates sont du texte, les montants n'ont pas de devise, et le total qui s'affichait au bas de votre liste a disparu.

Avec ce module, l'export produit un classeur :

  • les dates sont de vraies dates, qu'Excel sait trier et soustraire ;
  • les montants portent le symbole de leur devise ;
  • l'en-tête est figé et porte les menus de filtre ;
  • une ligne de totaux se trouve sous vos données — et ces totaux se recalculent quand vous filtrez dans Excel.

Ce dernier point est le plus important. Nous y revenons au chapitre 6.


2. Où se trouvent les écrans

Tout le paramétrage tient dans un seul menu :

Paramètres → Classeurs Excel → Modèles de classeur

L'export, lui, ne se fait pas depuis ce menu. Il se fait depuis la liste que vous voulez exporter, dans le menu Actions. C'est le chapitre 5.


3. Créer un modèle d'export

Un « modèle d'export » mémorise votre choix de colonnes pour un type d'enregistrement donné. Vous le définissez une fois ; vous vous en servez chaque mois.

3.1 Ouvrir la fiche

Allez dans Paramètres → Classeurs Excel → Modèles de classeur, puis cliquez sur Nouveau.

3.2 Remplir la portée

Champ Ce qu'il attend
Nom du modèle un nom parlant, qui apparaîtra dans le menu Actions. Par exemple « Annuaire des clients »
Modèle Odoo le type d'enregistrement à exporter : Contact, Commande, Facture…
Nom technique rempli tout seul. C'est une information, pas une saisie
Nom du fichier le nom du fichier téléchargé, sans extension. Laissé vide, le nom du modèle Odoo est repris

3.3 Régler la mise en forme

Trois cases, toutes cochées par défaut :

Réglage Effet
Figer la ligne d'en-tête l'en-tête reste visible quand on fait défiler le classeur
Filtre automatique pose les menus de filtre d'Excel sur l'en-tête. C'est lui qui rend les totaux vivants — voir chapitre 6
Ligne de totaux ajoute la ligne de totaux sous les données

Décocher « Filtre automatique » n'empêche pas les totaux de fonctionner, mais vous prive de ce qui les rend intéressants. Laissez-le coché.


4. Choisir les colonnes

L'onglet Colonnes est le cœur du paramétrage.

4.1 Ajouter une colonne

Cliquez sur Ajouter une ligne, puis choisissez le champ. La liste proposée ne contient que les champs du modèle Odoo retenu plus haut.

Colonne du tableau À quoi elle sert
⠿ (poignée) glissez-déposez pour changer l'ordre des colonnes dans le classeur
Champ le champ Odoo à exporter
Type rempli tout seul. Il vous dit si un total est possible
Titre de la colonne l'en-tête écrit dans le classeur. Laissé vide, le libellé du champ est repris
Total Aucun, Somme, Moyenne ou Nombre de valeurs
Largeur en caractères. Laissez 0 : la largeur s'ajuste alors sur le contenu

4.2 Les totaux possibles

Total Sur quels champs Ce qu'il donne
Aucun tous pas de total pour cette colonne
Somme nombres uniquement l'addition des lignes visibles
Moyenne nombres uniquement la moyenne des lignes visibles
Nombre de valeurs tous le compte des cellules non vides visibles

Si vous demandez une Somme ou une Moyenne sur une colonne de texte, Odoo refuse l'enregistrement et vous explique pourquoi : Excel rendrait zéro, et un zéro faux se lit comme un résultat. Utilisez Nombre de valeurs pour compter des lignes de texte.

4.3 Les champs qu'on ne peut pas exporter

Les pièces jointes (champs « binaire ») et les champs techniques JSON sont refusés : ils n'ont pas de rendu tabulaire honnête. Le message vous le dit au moment où vous les choisissez.


5. Poser l'export dans le menu Actions

C'est le geste qui rend le modèle utilisable au quotidien.

Sur la fiche du modèle, cliquez sur Poser dans le menu Action (bouton violet, en haut à gauche).

À partir de là, ouvrez la liste correspondante — par exemple Contacts —, cochez les lignes voulues, puis ouvrez le menu Actions : une nouvelle entrée y figure, nommée « Exporter en Excel — le nom de votre modèle ».

5.1 Produire le classeur

  1. Cochez les lignes à exporter dans la liste. Vous pouvez cocher la case du haut pour tout prendre.
  2. Actions → Exporter en Excel — …
  3. Une fenêtre s'ouvre, rappelant le modèle retenu et le nombre de lignes.
  4. Cliquez sur Produire le classeur.
  5. Le fichier apparaît ; cliquez dessus pour le télécharger.

Aucune ligne cochée ? Le module refuse et vous le dit. Il n'exporte jamais « tout » à votre insu.

5.2 Retirer l'entrée du menu

Le bouton Retirer du menu Action enlève l'entrée sans supprimer le modèle. Les deux gestes sont distincts exprès : vous pouvez ranger un export saisonnier sans le perdre, et le remettre l'année suivante.

Si vous supprimez le modèle, son entrée de menu disparaît avec lui — une entrée orpheline pointerait dans le vide.


6. Ce que donne le classeur, ouvert dans Excel

Ouvrez le fichier téléchargé. Vous y trouverez :

Une ligne d'en-tête en gras sur fond bleu clair, bordée, figée : elle reste visible quand vous descendez dans les lignes.

Des menus de filtre sur chaque en-tête (les petites flèches).

Des colonnes correctement typées : les dates se trient comme des dates, les montants s'additionnent, les nombres sont alignés à droite.

Une ligne de totaux en gras, séparée par un trait, sous la dernière ligne.

6.1 L'essentiel : filtrez, et regardez le total

Cliquez sur la flèche de filtre d'une colonne — par exemple Pays — et ne gardez que « Belgique ».

Le total se recalcule sur les seules lignes belges.

C'est ce que le module vous vend. La cellule ne contient pas un nombre écrit une fois pour toutes, mais une formule SUBTOTAL que le tableur recalcule à chaque filtre. Un total figé aurait été juste au moment de l'export, puis faux dès votre premier filtre — et rien ne vous aurait averti.

6.2 LibreOffice Calc

Le classeur s'ouvre de la même façon dans LibreOffice Calc, formules comprises. SUBTOTAL y porte le nom SOUS.TOTAL en interface française, mais c'est la même fonction et elle se comporte à l'identique.


7. Le cas des devises mélangées

Si une colonne monétaire contient des montants dans plusieurs devises, une seule ne peut pas être affichée correctement — une colonne Excel n'a qu'un format.

Le module ne choisit pas en silence. Il :

  • garde tous les montants exacts, sans conversion ni arrondi ;
  • applique le format de la première devise rencontrée ;
  • affiche un avertissement à l'écran, avant que vous ne téléchargiez le fichier, vous disant combien de devises se mélangent et laquelle a été retenue.

Vous êtes donc prévenu avant d'envoyer le fichier à votre comptable, et non après.

Si ce mélange vous gêne, filtrez votre liste par devise avant d'exporter, ou créez un modèle d'export par devise.


8. Le bandeau « xlsxwriter absent »

Si vous voyez, en ouvrant l'assistant d'export, un bandeau orange disant que la bibliothèque xlsxwriter est absente :

Ce n'est pas une panne. Le module reste installé et fonctionne. Seulement, il produira un fichier CSV au lieu d'un classeur : sans mise en forme, sans format de date ni de devise, et sans ligne de totaux.

Que faire

Cette bibliothèque fait partie de toute installation Odoo standard ; son absence signale une installation incomplète. Transmettez cette phrase à la personne qui administre votre serveur Odoo :

« Il manque la bibliothèque Python xlsxwriter sur le serveur. »

Elle l'installera en une commande. Le bandeau disparaîtra et les exports redeviendront des classeurs, sans rien reconfigurer de votre côté.

En attendant, vos exports fonctionnent — ils sont simplement moins riches, et le module vous le dit plutôt que de vous laisser le découvrir.


9. Qui peut faire quoi

Vous êtes Modèles d'export Exporter
Utilisateur interne vous les voyez, vous ne les modifiez pas oui, sans restriction
Administrateur système vous les créez et les modifiez oui

Un modèle d'export ajoute une entrée dans le menu Actions de tous les utilisateurs. C'est donc un réglage, confié à l'administrateur — pas une préférence personnelle.


10. Limites connues

Ce n'est pas un tableur dans Odoo. Le tableur intégré d'Odoo est une fonctionnalité de l'édition Enterprise ; ce module ne la remplace pas et ne prétend pas éditer des feuilles dans votre navigateur. Il exporte.

Pas de tableau croisé dynamique. Le classeur reproduit votre liste, colonne par colonne, pas une analyse croisée.

Pas de réimport. Un classeur modifié dans Excel ne remonte pas dans Odoo.

Pas de rapports PDF. Le module ne touche à aucun rapport imprimé existant.


11. Questions fréquentes

Puis-je avoir plusieurs exports différents pour le même type d'enregistrement ? Oui. Créez autant de modèles que vous voulez sur le même modèle Odoo, avec des noms différents — « Annuaire complet », « Annuaire commercial »… Chacun pose sa propre entrée dans le menu Actions. Deux modèles ne peuvent simplement pas porter le même nom sur le même modèle Odoo.

Pourquoi ma colonne est-elle trop étroite ? Laissez 0 dans la colonne Largeur : le module ajuste alors sur le contenu réel. Une largeur saisie est respectée telle quelle, même si elle coupe le texte.

Le total affiche zéro alors que ma colonne contient des nombres. Vérifiez que la colonne est bien d'un type numérique dans Odoo. Un nombre stocké comme texte reste du texte, et SUBTOTAL ne l'additionne pas.

Puis-je exporter des milliers de lignes ? Oui. Le classeur est construit en mémoire ; sur de très grands volumes, la production prend quelques secondes.

Le module envoie-t-il mes données quelque part ? Non. Il n'émet aucun appel sortant. Tout se passe dans votre serveur Odoo. C'est aussi pourquoi il fonctionne sur Odoo Online, où les appels sortants sont interdits.

Mon export contient des lignes que je n'avais pas cochées. Ce n'est pas possible : le module n'exporte que la sélection qui lui a été transmise. Vérifiez que vous n'aviez pas coché la case d'en-tête, qui sélectionne toute la page.


DYONYSOS — https://dyonysos.fr — welcome@dyonysos.fr

Avis des clients connectés. Un avis noté par client ; l'éditeur peut y répondre. Connectez-vous pour laisser un avis.

Éditeur
DYONYSOS
E-mail
contact@omnifloo.com
Clients Omnifloo
Support inclus selon votre formule : centre d'aide.