Jump to content

Archived

This topic is now archived and is closed to further replies.

Wooden

Probleme Format XLS

Recommended Posts

Bonjour,

Je programme un soft en Java qui produit en sortie des fichier Excel .xls

Pour gérer ce type de fichier j'utilise la lib POI d'Apache.

Basiquement, j'utilise de fichier xls comme template et je les rempli selon les besoin.

Dans ce processus, je clone les feuille de template dont j'ai besoin, je remplie les copies et quand tout est près je vire les feuille de template pour avoir un un "Workbook" (classeur ?) propre.

POI a un peu de mal a faire ça :

Dans le format xls ya des record "NAME" ou "Lbl" (le nom varie selon les specs plus ou moins recentes de MS) qui permettent de donner des nom a des formules, des macros, permettent de spécifier divers paramètre pour les feuilles de calcul par le biais de" built-in names". Ces nom peuvent etre associé a des feuilles de calcul.

Pour commancer, quand POI clone une feuille il clone aussi les noms qui lui sont associé, met a jour les referances eventuelles à la feuille à l'interieur de la formule definie par le nom cloné mais ne met pas a jour la table des "ExternSheets" qui servent de pointeur pour ces referances (dans les formules, il est donné un index dans la table des "ExternSheets", à cet index on peut retrouver les feuilles effectivement concernées)

Apres un petit patch pour corriger ça, POI arrive à me sortir des .xls qui fonctionnent sans problèmes avec Excel 2007, 2003 et meme open office, seulement voila ça serai trop beau, Excel 2000 (et je suppose 97 aussi) refusent de les lire.

Apres quelques recherches j'ai fini par comprendre que c'etait l'ordre des NAME Records qu'Excel 2000 aimait pas : apres avoir re-enregistré un fichier produit par POI avec excel 2007, excel 2000 veux bien l'ouvrir, on voit parmis diverse legeres differences, une difference dans l'ordre des NAMEs pour etre sur je mod le fichier produit par POI a l'editeur hexa pour metre les records dans l'ordre donné par excel 2007 et la en effet excel 2000 est content...

La spec "Excel97-2007BinaryFileFormat(xls)Specification" dit:

All NAME records should appear together in a BIFF file. The order of NAME records in an existing BIFF file should not be changed. You can add new names to a file, but you should add them at the end of the NAME list (block of NAME records). Excel saves the names to the BIFF file in alphabetic order, but this is not a requirement; Excel will sort the name list, if necessary, when it loads a BIFF file.

Certe mais:

1 - un simple tri alphabetique comme le dit la spec ne marche pas toujours avec Excel 2000

2 - ce qui marche la plus souvant (...) c'est un tri par : indice de feuille *externe* puis alphabetique sur le nom (par index de nom built-in pour les built-in) puis par numero de feuille

cela ne marche pas toujours...

3 - la spec dit que l'ordre ne devrais pas etre changer pour les fichier existant, probablement car il existe des element qui pointe vers les nom (les PtgName) grace a leur index par ordre d'arrivé dans le fichier cependant excel 2007 adore re-ordonner les NAMEs et cela plait bcp à excel 2000

Est-ce que quelqu'un a une idée de ce qui peu bien passer par la tête d'excel 2000 ? quel ordre lui convient?

Desolé pour la question un peu technique mais bon on sais jamais...

Share this post


Link to post
Share on other sites

×
×
  • Create New...