He estado luchando con este problema exacto durante los últimos días y he escrito una pequeña utilidad .NET para extraer y normalizar archivos de Excel de tal manera que sean mucho más fáciles de almacenar en el control de código fuente. He publicado el ejecutable aquí:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..y la fuente aquí:
https://bitbucket.org/htilabs/ooxmlunpack
Si hay algún interés, me complace hacer esto más configurable, pero en este momento, debe colocar el ejecutable en una carpeta (por ejemplo, la raíz de su repositorio de origen) y cuando lo ejecute, hará lo siguiente:
- Escanee la carpeta y sus subcarpetas en busca de archivos .xlsx y .xlsm
- Tome una copia del archivo como * .orig.
- Descomprima cada archivo y vuelva a comprimirlo sin compresión.
- Imprima con estilo cualquier archivo del archivo que sea XML válido.
- Elimine el archivo calcchain.xml del archivo (ya que cambia mucho y no afecta el contenido del archivo).
- Inserte cualquier valor de texto sin formato (de lo contrario, se mantienen en una tabla de búsqueda que provoca grandes cambios en el XML interno si se modifica incluso una sola celda).
- Elimine los valores de cualquier celda que contenga fórmulas (ya que solo se pueden calcular cuando se abre la hoja).
- Cree una subcarpeta * .extracted, que contenga el contenido del archivo zip extraído.
Claramente, no todas estas cosas son necesarias, pero el resultado final es un archivo de hoja de cálculo que aún se abrirá en Excel, pero que es mucho más adecuado para la compresión diferencial e incremental. Además, almacenar los archivos extraídos también hace que sea mucho más obvio en el historial de versiones qué cambios se han aplicado en cada versión.
Si hay algo de apetito, me complace hacer que la herramienta sea más configurable, ya que supongo que no todos querrán que se extraiga el contenido, o posiblemente se eliminen los valores de las celdas de fórmula, pero ambos son muy útiles para mí en este momento.
En las pruebas, una hoja de cálculo de 2 MB se 'descomprime' a 21 MB, pero luego pude almacenar cinco versiones de la misma con pequeños cambios entre cada una, en un archivo de datos Mercurial de 1,9 MB, y visualizar las diferencias entre las versiones de manera efectiva usando Beyond Compare en modo texto.
NB: aunque estoy usando Mercurial, leí esta pregunta mientras investigaba mi solución y no hay nada específico de Mercurial sobre la solución, debería funcionar bien para Git o cualquier otro VCS.