J'ai été confronté à ce problème exact ces derniers jours et j'ai écrit un petit utilitaire .NET pour extraire et normaliser les fichiers Excel de manière à ce qu'ils soient beaucoup plus faciles à stocker dans le contrôle de la source. J'ai publié l'exécutable ici :
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..et la source ici :
https://bitbucket.org/htilabs/ooxmlunpack
S'il y a un intérêt quelconque, je serai heureux de rendre cela plus configurable, mais pour le moment, vous devez mettre l'exécutable dans un dossier (par exemple, la racine de votre dépôt de sources) et quand vous le lancerez, il le fera :
- Recherchez les fichiers .xlsx et .xlsm dans le dossier et ses sous-dossiers.
- Prenez une copie du fichier en tant que *.orig.
- Dézipper chaque fichier et le re-zipper sans compression.
- Impression de tous les fichiers de l'archive qui sont des fichiers XML valides.
- Supprimez le fichier calcchain.xml de l'archive (car il change beaucoup et n'affecte pas le contenu du fichier).
- Inlinez toutes les valeurs de texte non formatées (sinon, elles sont conservées dans une table de consultation qui entraîne d'importants changements dans le XML interne si une seule cellule est modifiée).
- Supprimez les valeurs de toutes les cellules qui contiennent des formules (car elles peuvent être calculées à la prochaine ouverture de la feuille).
- Créez un sous-dossier *.extracted, contenant le contenu de l'archive zip extraite.
Il est clair que tous ces éléments ne sont pas nécessaires, mais le résultat final est un fichier de feuille de calcul qui s'ouvrira toujours dans Excel, mais qui se prête beaucoup mieux au diffing et à la compression incrémentielle. En outre, le fait de stocker également les fichiers extraits rend beaucoup plus évidentes, dans l'historique des versions, les modifications qui ont été appliquées dans chaque version.
Si vous avez de l'appétit, je serais heureux de rendre l'outil plus configurable, car je suppose que tout le monde ne voudra pas que le contenu soit extrait, ou éventuellement que les valeurs soient supprimées des cellules de formule, mais ces deux éléments me sont très utiles pour le moment.
Lors des tests, une feuille de calcul de 2 Mo se "décompresse" en 21 Mo, mais j'ai ensuite été en mesure de stocker cinq versions de cette feuille, avec de petites modifications entre chacune d'elles, dans un fichier de données Mercurial de 1,9 Mo, et de visualiser efficacement les différences entre les versions à l'aide du logiciel Au-delà de la comparaison en mode texte.
NB : bien que j'utilise Mercurial, j'ai lu cette question lors de la recherche de ma solution et il n'y a rien de spécifique à Mercurial dans la solution, elle devrait fonctionner parfaitement pour Git ou tout autre VCS.