Ho lottato con questo problema esatto negli ultimi giorni e ho scritto una piccola utility .NET per estrarre e normalizzare i file Excel in modo tale che siano molto più facili da memorizzare nel controllo del codice sorgente. Ho pubblicato l'eseguibile qui:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..e la fonte qui:
https://bitbucket.org/htilabs/ooxmlunpack
Se c'è qualche interesse, sono felice di renderlo più configurabile, ma al momento dovresti mettere l'eseguibile in una cartella (es. La radice del tuo repository sorgente) e quando lo esegui, lo farà:
- Scansiona la cartella e le sue sottocartelle per eventuali file .xlsx e .xlsm
- Prendi una copia del file come * .orig.
- Decomprimere ogni file e comprimerlo nuovamente senza compressione.
- Stampa abbastanza qualsiasi file nell'archivio che sia XML valido.
- Elimina il file calcchain.xml dall'archivio (poiché cambia molto e non influisce sul contenuto del file).
- Inline tutti i valori di testo non formattati (altrimenti questi vengono conservati in una tabella di ricerca che causa grandi cambiamenti nell'XML interno se viene modificata anche una singola cella).
- Elimina i valori da tutte le celle che contengono formule (poiché possono essere calcolate solo alla successiva apertura del foglio).
- Crea una sottocartella * .extracted, contenente il contenuto dell'archivio zip estratto.
Chiaramente non tutte queste cose sono necessarie, ma il risultato finale è un file di foglio di calcolo che verrà comunque aperto in Excel, ma che è molto più suscettibile di compressione differenziale e incrementale. Inoltre, la memorizzazione anche dei file estratti rende molto più ovvio nella cronologia delle versioni quali modifiche sono state applicate in ciascuna versione.
Se c'è appetito là fuori, sono felice di rendere lo strumento più configurabile poiché immagino che non tutti vorranno i contenuti estratti, o forse i valori rimossi dalle celle della formula, ma questi sono entrambi molto utili per me al momento.
Nei test, un foglio di calcolo da 2 MB 'scompatta' a 21 MB, ma poi sono stato in grado di memorizzare cinque versioni di esso con piccole modifiche tra ciascuna, in un file di dati Mercurial da 1,9 MB, e visualizzare le differenze tra le versioni in modo efficace utilizzando Beyond Compare in modalità testo.
NB: sebbene io stia usando Mercurial, ho letto questa domanda durante la ricerca della mia soluzione e non c'è niente di specifico di Mercurial sulla soluzione, dovrebbe funzionare bene per Git o qualsiasi altro VCS.