Od kilku dni zmagam się z tym problemem i napisałem małe narzędzie .NET do wyodrębniania i normalizowania plików Excela w taki sposób, że są one znacznie łatwiejsze do przechowywania w kontroli źródła. Tutaj opublikowałem plik wykonywalny:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
.. a źródło tutaj:
https://bitbucket.org/htilabs/ooxmlunpack
Jeśli jest jakieś zainteresowanie, z przyjemnością uczynię to bardziej konfigurowalnym, ale w tej chwili powinieneś umieścić plik wykonywalny w folderze (np. W katalogu głównym repozytorium źródłowego), a kiedy go uruchomisz, będzie:
- Przeskanuj folder i jego podfoldery w poszukiwaniu plików .xlsx i .xlsm
- Zrób kopię pliku jako * .orig.
- Rozpakuj każdy plik i ponownie spakuj go bez kompresji.
- Wydrukuj wszystkie pliki w archiwum, które są poprawnym XML.
- Usuń plik calcchain.xml z archiwum (ponieważ bardzo się zmienia i nie wpływa na zawartość pliku).
- Umieszczaj w linii wszelkie niesformatowane wartości tekstowe (w przeciwnym razie są one przechowywane w tabeli przeglądowej, co powoduje duże zmiany w wewnętrznym pliku XML, jeśli nawet jedna komórka zostanie zmodyfikowana).
- Usuń wartości z komórek zawierających formuły (ponieważ można je obliczyć po następnym otwarciu arkusza).
- Utwórz podfolder * .extracted, zawierający wyodrębnioną zawartość archiwum zip.
Oczywiście nie wszystkie te rzeczy są konieczne, ale efektem końcowym jest plik arkusza kalkulacyjnego, który nadal będzie otwierany w programie Excel, ale który jest znacznie bardziej podatny na różnicowanie i kompresję przyrostową. Przechowywanie również wyodrębnionych plików sprawia, że w historii wersji znacznie bardziej oczywiste jest, jakie zmiany zostały zastosowane w każdej wersji.
Jeśli jest jakiś apetyt, cieszę się, że mogę uczynić narzędzie bardziej konfigurowalnym, ponieważ myślę, że nie każdy będzie chciał wyodrębnić zawartość lub być może wartości usunięte z komórek formuł, ale obie te opcje są dla mnie bardzo przydatne w tej chwili.
W testach arkusz kalkulacyjny o wielkości 2 MB `` rozpakowuje się '' do 21 MB, ale potem byłem w stanie zapisać pięć wersji z małymi zmianami między nimi, w pliku danych Mercurial o wielkości 1,9 MB i wizualizować różnice między wersjami skutecznie przy użyciu Beyond Compare w tryb tekstowy.
NB: chociaż używam Mercurial, przeczytałem to pytanie podczas badania mojego rozwiązania i nie ma nic specyficznego dla Mercurial w tym rozwiązaniu, powinno działać dobrze dla Git lub innego VCS.