5 min de lecture
Excel refuse d'exporter votre XML (« liste des listes ») : pourquoi et que faire
Par Quentin Delepierre, consultant Salesforce Commerce Cloud
Vous avez importé un fichier XML dans Excel, modifié vos données, et l'export échoue. Ce n'est pas un problème de réglage : l'export XML d'Excel ne sait écrire que des structures simples. Voici pourquoi, et comment contourner la limite.
Le message d'erreur
Dans l'onglet Développeur, la commande Exporter (ou Fichier › Enregistrer sous › Données XML) s'arrête sur une erreur. En anglais, la boîte s'intitule « Cannot save or export XML data » et indique « The XML maps in this workbook are not exportable ». La documentation française de Microsoft décrit ce cas ainsi : « Les cartes XML de votre classeur ne peuvent pas être exportées ».
Dans le volet Source XML, la vérification du mappage pour l'exportation donne la raison. Le plus souvent : une « liste des listes ».
Pourquoi Excel refuse
Excel relie le XML à des tableaux par un mappage. Ce mappage s'exporte seulement si chaque élément garde une place sans ambiguïté dans un tableau à plat. Microsoft liste trois structures qui l'empêchent :
- « Liste des listes » : une liste d'éléments contient une deuxième liste d'éléments. Par exemple, des produits qui ont chacun plusieurs prix, plusieurs images ou une description par langue.
- « Données dénormalisées » : un élément prévu pour n'apparaître qu'une fois est placé dans un tableau qui se répète.
- « Choix » : un élément mappé fait partie d'une construction de choix du schéma.
- Les commentaires du fichier ne sont pas conservés non plus.
« La carte XML peut être exportée, mais certains éléments requis ne sont pas mappés »
Avec ce second message, l'export part, mais le fichier produit risque d'être refusé par le système qui doit le relire. Les causes données par Microsoft :
- Des éléments obligatoires du schéma ne sont reliés à aucune colonne.
- Une structure récursive (un élément qui se contient lui-même, comme une arborescence de catégories) : Excel ne la prend pas en charge au-delà d'un niveau.
- Du contenu mixte : un élément contient à la fois du texte et des sous-éléments (« Appuyez <b>ici</b> »).
Au-delà de 65 536 lignes, l'export est tronqué
D'après la documentation de Microsoft, l'export XML d'Excel enregistre au maximum 65 536 lignes. Au-delà, il n'exporte que les premières lignes, dans la limite du reste de la division du nombre de lignes par 65 537 : sur un fichier de 70 000 lignes, seules 4 463 lignes partent dans le XML.
Un exemple : la plupart des catalogues
Presque tous les exports catalogue et flux produits contiennent des listes dans des listes. Un seul produit avec deux langues suffit :
<catalogue>
<produit id="P001">
<description xml:lang="fr">Veste coupe-vent</description>
<description xml:lang="en">Windproof jacket</description>
</produit>
<produit id="P002">
…
</produit>
</catalogue>Les contournements dans Excel, et leurs limites
- Simplifier le schéma pour qu'il n'ait plus de listes imbriquées : rarement possible, car c'est le système qui importera le fichier (Business Manager, Merchant Center, votre PIM) qui impose sa structure.
- Écrire une macro ou un script qui reconstruit le XML : efficace, mais il faut le développer, le maintenir, et le refaire pour chaque format.
- Enregistrer au format « Feuille de calcul XML 2003 » : ce format décrit un classeur Excel (feuilles, cellules, styles), pas la structure de votre fichier ; le système cible le refusera. Et « Données XML », dans Enregistrer sous, passe par le même mappage que l'export : il échoue de la même façon.
- Power Query (Données › Obtenir des données › À partir d'un fichier › À partir de XML) lit très bien un XML imbriqué et l'aplatit en tableau, mais il ne sait pas écrire de XML : vous pouvez lire votre fichier, pas le réenregistrer.
La méthode sans mappage XML
ExcelifyXML ne passe pas par les mappages d'Excel. Il aplatit le XML en CSV, en gardant à part la structure du fichier, puis reconstruit le XML à partir du CSV modifié. Les listes imbriquées deviennent des colonnes (description[fr], description[en], image[0], image[1]), et la reconstruction les remet à leur place.
Avec une ligne par commande, les listes intérieures deviennent des colonnes numérotées : lines.line[0].@sku, lines.line[0].discounts.discount[1].@code, lines.line[0].discounts.discount[1]… La reconstruction les replace à leur niveau.
Une limite : le texte mêlé à des balises (« Appuyez <b>ici</b> ») ne tient pas dans une cellule. Seul le texte des balises est gardé ; l'aperçu et l'écran de résultat le signalent.
- Déposez votre fichier XML sur la page Upload : l'aperçu gratuit montre la ligne détectée et les colonnes obtenues.
- Confirmez (1 crédit) et téléchargez le bundle : data.csv et skeleton.json.
- Modifiez data.csv dans Excel, comme n'importe quel tableau.
- Sur la page Reconstruction, déposez le data.csv modifié avec son skeleton.json : vous obtenez le XML, avec ses listes imbriquées. Pas de limite de 65 536 lignes de notre côté : la reconstruction accepte jusqu'à 1 000 000 de lignes et 100 000 colonnes, pour un XML d'environ 30 Mo au plus.
Variante : régénérer le XML depuis Excel
Vous voulez garder le bouton « Exporter » dans Excel ? Le classeur Excel autonome (2 crédits) contient vos données et un bouton « Générer le XML », qui sait écrire les listes imbriquées. La génération se fait dans Excel, sur votre poste, hors ligne. Il faut Excel de bureau, sur Windows ou sur Mac.
Pour aller plus loin
Modifiez votre XML dans Excel, sans mappage :
Transformer un fichier