Tôi đã vật lộn với vấn đề chính xác này trong vài ngày qua và đã viết một tiện ích .NET nhỏ để giải nén và chuẩn hóa các tệp Excel theo cách mà chúng dễ lưu trữ hơn nhiều trong điều khiển nguồn. Tôi đã xuất bản tệp thực thi ở đây:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
..và nguồn ở đây:
https://bitbucket.org/htilabs/ooxmlunpack
Nếu có bất kỳ sự quan tâm nào, tôi rất vui khi làm cho tệp này có thể cấu hình tốt hơn, nhưng hiện tại, bạn nên đặt tệp thực thi vào một thư mục (ví dụ: thư mục gốc của kho lưu trữ nguồn của bạn) và khi bạn chạy nó, nó sẽ:
- Quét thư mục và các thư mục con của nó để tìm bất kỳ tệp .xlsx và .xlsm nào
- Chụp một bản sao của tệp dưới dạng * .orig.
- Giải nén từng tệp và nén lại mà không cần nén.
- In đẹp bất kỳ tệp nào trong kho lưu trữ là XML hợp lệ.
- Xóa tệp calcchain.xml khỏi kho lưu trữ (vì nó thay đổi nhiều và không ảnh hưởng đến nội dung của tệp).
- Nội dòng bất kỳ giá trị văn bản chưa được định dạng nào (nếu không, những giá trị này được lưu trong bảng tra cứu, điều này gây ra những thay đổi lớn trong XML nội bộ nếu ngay cả một ô duy nhất được sửa đổi).
- Xóa các giá trị khỏi bất kỳ ô nào có chứa công thức (vì chúng chỉ có thể được tính khi trang tính được mở tiếp theo).
- Tạo một thư mục con * .extracted, chứa nội dung lưu trữ zip đã giải nén.
Rõ ràng không phải tất cả những điều này đều cần thiết, nhưng kết quả cuối cùng là một tệp bảng tính vẫn sẽ mở trong Excel, nhưng có thể dễ dàng hơn để nén khác nhau và tăng dần. Ngoài ra, việc lưu trữ các tệp đã giải nén cũng làm cho nó rõ ràng hơn nhiều trong lịch sử phiên bản những thay đổi đã được áp dụng trong mỗi phiên bản.
Nếu có bất kỳ mong muốn nào ở đó, tôi rất vui khi làm cho công cụ có thể cấu hình tốt hơn vì tôi đoán không phải ai cũng muốn nội dung được trích xuất hoặc có thể là các giá trị bị xóa khỏi ô công thức, nhưng cả hai đều rất hữu ích đối với tôi vào lúc này.
Trong các thử nghiệm, một bảng tính 2 MB 'giải nén' thành 21 MB, nhưng sau đó tôi có thể lưu trữ năm phiên bản của nó với những thay đổi nhỏ giữa mỗi phiên bản, trong một tệp dữ liệu Mercurial 1,9 MB và trực quan hóa sự khác biệt giữa các phiên bản một cách hiệu quả bằng cách sử dụng Beyond Compare trong chế độ văn bản.
NB: Mặc dù tôi đang sử dụng Mercurial, tôi đã đọc câu hỏi này trong khi nghiên cứu giải pháp của mình và không có gì cụ thể về giải pháp của Mercurial, sẽ hoạt động tốt cho Git hoặc bất kỳ VCS nào khác.