В последние несколько дней я боролся с этой проблемой и написал небольшую утилиту .NET для извлечения и нормализации файлов Excel таким образом, чтобы их было намного проще хранить в системе контроля версий.Я опубликовал исполняемый файл здесь:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
.. и источник здесь:
https://bitbucket.org/htilabs/ooxmlunpack
Если есть интерес, яЯ рад сделать это более настраиваемым, но на данный момент вы должны поместить исполняемый файл в папку (например, в корень вашего исходного репозитория), и при запуске он будет:
- Сканироватьпапка и ее подпапки для любых файлов .xlsx и .xlsm
- Возьмите копию файла как * .orig
- Разархивируйте каждый файл и повторно заархивируйте его без сжатия
- Довольно распечатать все файлы в архиве, которые являются действительными XML
- Удалить файл calcchain.xml из архива (так как он сильно изменяется и не влияет на содержимое файла)
- Встроить любые неформатированные текстовые значения (в противном случае они хранятся в справочной таблице, которая вызывает большие изменения во внутреннем XML, если даже одна ячейка изменена)
- Удалить значения из любых ячеек, которые содержат формулы (так как ониможно просто рассчитать, когда листext открыл)
- Создать подпапку * .extracted, содержащую извлеченное содержимое архива zip
Ясно, что не все эти вещи необходимы, но конечным результатом является файл электронной таблицы, который будетвсе еще открыт в Excel, но который гораздо более поддается диффузии и инкрементальному сжатию.Кроме того, сохранение извлеченных файлов также делает более очевидным в истории версий, какие изменения были применены в каждой версии.
Если есть какой-либо аппетит, я рад сделать инструмент более настраиваемым, так какЯ предполагаю, что не все захотят извлечь содержимое или, возможно, значения, извлеченные из ячеек формулы, но сейчас они оба очень полезны для меня.
В тестах электронная таблица размером 2 МБ «распаковывается» до 21 МБ, но затемМне удалось сохранить пять его версий с небольшими изменениями между ними, в файле ртутных данных объемом 1,9 МБ, и визуализировать различия между версиями, эффективно используя Beyond Compare в текстовом режиме.