Ich habe in den letzten Tagen mit genau diesem Problem zu kämpfen und ein kleines .NET-Dienstprogramm geschrieben, um Excel-Dateien so zu extrahieren und zu normalisieren, dass sie in der Quellcodeverwaltung viel einfacher zu speichern sind. Ich habe die ausführbare Datei hier veröffentlicht:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..und die Quelle hier:
https://bitbucket.org/htilabs/ooxmlunpack
Wenn es Interesse gibt, bin ich froh, dies konfigurierbarer zu machen, aber im Moment sollten Sie die ausführbare Datei in einem Ordner (z. B. dem Stammverzeichnis Ihres Quell-Repositorys) ablegen. Wenn Sie sie ausführen, wird sie:
- Durchsuchen Sie den Ordner und seine Unterordner nach XLSX- und XLSM-Dateien
- Nehmen Sie eine Kopie der Datei als * .orig.
- Entpacken Sie jede Datei und komprimieren Sie sie ohne Komprimierung erneut.
- Drucken Sie alle Dateien im Archiv, die gültiges XML sind, hübsch aus.
- Löschen Sie die Datei calcchain.xml aus dem Archiv (da sie sich stark ändert und den Inhalt der Datei nicht beeinflusst).
- Inline alle unformatierten Textwerte (andernfalls werden diese in einer Nachschlagetabelle gespeichert, was zu großen Änderungen im internen XML führt, wenn auch nur eine einzelne Zelle geändert wird).
- Löschen Sie die Werte aus allen Zellen, die Formeln enthalten (da diese nur beim nächsten Öffnen des Blattes berechnet werden können).
- Erstellen Sie einen Unterordner * .extracted, der den extrahierten Inhalt des Zip-Archivs enthält.
Natürlich sind nicht alle diese Dinge notwendig, aber das Endergebnis ist eine Tabellenkalkulationsdatei, die weiterhin in Excel geöffnet wird, die jedoch einer unterschiedlichen und inkrementellen Komprimierung viel besser zugänglich ist. Durch das Speichern der extrahierten Dateien wird im Versionsverlauf viel deutlicher, welche Änderungen in den einzelnen Versionen vorgenommen wurden.
Wenn da draußen Appetit besteht, bin ich froh, das Tool konfigurierbarer zu machen, da ich denke, dass nicht jeder den Inhalt extrahieren oder möglicherweise die Werte aus Formelzellen entfernen möchte, aber beide sind im Moment sehr nützlich für mich.
In Tests wurde eine 2-MB-Tabelle auf 21 MB entpackt, aber dann konnte ich fünf Versionen mit jeweils kleinen Änderungen in einer 1,9-MB-Mercurial-Datendatei speichern und die Unterschiede zwischen den Versionen mithilfe von Beyond Compare in effektiv visualisieren Textmodus.
NB: Obwohl ich Mercurial verwende, habe ich diese Frage bei der Recherche meiner Lösung gelesen und es gibt nichts Mercurial-spezifisches an der Lösung, das für Git oder jedes andere VCS gut funktionieren sollte.