Saya telah berjuang dengan masalah yang tepat ini selama beberapa hari terakhir dan telah menulis utilitas .NET kecil untuk mengekstrak dan menormalkan file Excel sedemikian rupa sehingga lebih mudah untuk disimpan di kontrol sumber. Saya telah menerbitkan eksekusi di sini:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..dan sumbernya di sini:
https://bitbucket.org/htilabs/ooxmlunpack
Jika ada minat, saya senang membuatnya lebih dapat dikonfigurasi, tetapi saat ini, Anda harus meletakkan file yang dapat dieksekusi di folder (misalnya root repositori sumber Anda) dan ketika Anda menjalankannya, itu akan:
- Pindai folder dan subfoldernya untuk menemukan file .xlsx dan .xlsm
- Ambil salinan file sebagai * .orig.
- Unzip setiap file dan zip ulang tanpa kompresi.
- Cukup cetak file apa pun dalam arsip yang merupakan XML yang valid.
- Hapus file calcchain.xml dari arsip (karena banyak berubah dan tidak memengaruhi konten file).
- Sebariskan nilai teks apa pun yang tidak diformat (jika tidak, ini disimpan dalam tabel pencarian yang menyebabkan perubahan besar dalam XML internal bahkan jika satu sel dimodifikasi).
- Hapus nilai dari sel mana pun yang berisi rumus (karena mereka hanya bisa dihitung saat lembar dibuka berikutnya).
- Buat subfolder * .extracted, yang berisi konten arsip zip yang diekstrak.
Jelas tidak semua hal ini diperlukan, tetapi hasil akhirnya adalah file spreadsheet yang akan tetap terbuka di Excel, tetapi lebih dapat menerima kompresi diffing dan incremental. Selain itu, menyimpan file yang diekstrak juga membuatnya lebih jelas dalam riwayat versi perubahan apa yang telah diterapkan di setiap versi.
Jika ada selera makan di luar sana, saya senang membuat alat ini lebih dapat dikonfigurasi karena saya kira tidak semua orang ingin konten diekstraksi, atau mungkin nilai dihapus dari sel formula, tetapi keduanya sangat berguna bagi saya saat ini.
Dalam pengujian, spreadsheet 2 MB 'membongkar' menjadi 21 MB, tetapi kemudian saya dapat menyimpan lima versi dengan perubahan kecil di antara masing-masing, dalam file data Mercurial 1,9 MB, dan memvisualisasikan perbedaan antara versi secara efektif menggunakan Beyond Compare di mode teks.
NB: meskipun saya menggunakan Mercurial, saya membaca pertanyaan ini saat meneliti solusi saya dan tidak ada solusi khusus Mercurial tentang solusi tersebut, yang seharusnya berfungsi dengan baik untuk Git atau VCS lainnya.