Ich habe in den letzten Tagen mit genau diesem Problem gekämpft und ein kleines .NET-Dienstprogramm geschrieben, um Excel-Dateien zu extrahieren und zu normalisieren, sodass sie viel einfacher in der Versionskontrolle gespeichert werden können. Ich habe die ausführbare Datei hier veröffentlicht:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..und den Quellcode hier:
https://bitbucket.org/htilabs/ooxmlunpack
Wenn Interesse besteht, bin ich gerne bereit, das Ganze konfigurierbarer zu machen. Aber im Moment sollten Sie die ausführbare Datei in einen Ordner (z.B. den Stamm Ihres Quellcode-Repositories) legen und wenn Sie sie ausführen, wird sie folgendes tun:
- Den Ordner und seine Unterordner nach .xlsx- und .xlsm-Dateien durchsuchen
- Eine Kopie der Datei als *.orig erstellen
- Jede Datei entpacken und neu komprimieren, ohne Kompression
- Alle Dateien im Archiv, die gültiges XML sind, schön formatieren
- Die calcchain.xml-Datei aus dem Archiv löschen (da sie sich oft ändert und den Inhalt der Datei nicht beeinflusst)
- Alle nicht formatierten Textwerte in Zeile einfügen (ansonsten werden sie in einer Lookup-Tabelle gespeichert, was zu großen Änderungen im internen XML führt, selbst wenn nur eine Zelle geändert wird)
- Die Werte aus Zellen löschen, die Formeln enthalten (da sie einfach berechnet werden können, wenn das Blatt beim nächsten Mal geöffnet wird)
- Einen Unterordner *.extracted erstellen, der den Inhalt des extrahierten Zip-Archivs enthält
Natürlich sind nicht alle diese Dinge notwendig, aber das Endergebnis ist eine Tabellendatei, die immer noch in Excel geöffnet werden kann, jedoch viel besser für das Vergleichen und inkrementelle Komprimierung geeignet ist. Außerdem macht es die Speicherung der extrahierten Dateien deutlicher, was in der Versionshistorie geändert wurde.
Wenn Bedarf besteht, bin ich bereit, das Tool konfigurierbarer zu machen, da wohl nicht jeder den Inhalt extrahiert haben möchte, oder möglicherweise die Werte aus den Formelzellen entfernt haben möchte, aber für mich sind beide Funktionen im Moment sehr nützlich.
In Tests wurde eine 2MB-Tabelle auf 21MB 'ausgepackt', danach konnte ich fünf Versionen davon mit kleinen Änderungen zwischen jeder in einer 1,9MB Mercurial-Datendatei speichern und die Unterschiede zwischen den Versionen effektiv mit Beyond Compare im Textmodus visualisieren.
3 Stimmen
git
hat das Hook-Verhalten, das dies ermöglichen wird, aber ich weiß nicht über hg.2 Stimmen
Was Ihren zweiten Punkt betrifft: Beachten Sie, dass diese Dokumentenformate (insbesondere .xslx und ODF) Leerzeichen nicht gemäß dem XML-Standard behandeln, sondern - hauptsächlich aus praktischen Gründen - Leerzeichen beibehalten, auch wenn dies nicht angezeigt wird. Das Einrücken einer Datei könnte daher den Inhalt ändern.
1 Stimmen
Warum möchten Sie die zip-format Dateien genau nicht in die Versionskontrolle aufnehmen? Welches Problem möchten Sie lösen?
1 Stimmen
@Rudi - Ich möchte sinnvolle Änderungen sehen. Ich will kein riesiges Repository, nur weil ich jeden Tag kleine Änderungen an einer docx Datei vornehme.