Je me débat avec ce problème exact depuis quelques 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 code 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, je suis heureux de rendre cela plus configurable, mais pour le moment, vous devriez placer l'exécutable dans un dossier (par exemple la racine de votre référentiel source) et lorsque vous l'exécuterez, il:
- Analysez le dossier et ses sous-dossiers à la recherche de fichiers .xlsx et .xlsm
- Prenez une copie du fichier au format * .orig.
- Décompressez chaque fichier et re-zip sans compression.
- Imprimez joliment tous les fichiers de l'archive qui sont du XML valide.
- Supprimez le fichier calcchain.xml de l'archive (car il change beaucoup et n'affecte pas le contenu du fichier).
- Inline toutes les valeurs de texte non formatées (sinon, elles sont conservées dans une table de consultation, ce qui entraîne de grands changements dans le XML interne si même une seule cellule est modifiée).
- Supprimez les valeurs de toutes les cellules contenant des formules (car elles peuvent simplement être calculées lors de la prochaine ouverture de la feuille).
- Créez un sous-dossier * .extrait, contenant le contenu de l'archive zip extraite.
Il est clair que toutes ces choses ne sont pas nécessaires, mais le résultat final est un fichier de feuille de calcul qui sera toujours ouvert dans Excel, mais qui se prête beaucoup mieux à une compression différente et incrémentielle. De plus, le stockage des fichiers extraits rend beaucoup plus évident dans l'historique des versions les changements qui ont été appliqués dans chaque version.
S'il y a un quelconque appétit, je suis heureux de rendre l'outil plus configurable car je suppose que tout le monde ne voudra pas que le contenu soit extrait, ou peut-être les valeurs 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 `` décompresse '' à 21 Mo, mais j'ai ensuite pu stocker cinq versions de celle-ci avec de petites modifications entre chacune, dans un fichier de données Mercurial de 1,9 Mo, et visualiser les différences entre les versions efficacement en utilisant Beyond Compare dans mode texte.
NB: bien que j'utilise Mercurial, j'ai lu cette question en recherchant ma solution et il n'y a rien de spécifique à Mercurial dans la solution, cela devrait fonctionner correctement pour Git ou tout autre VCS.