ฉันกำลังดิ้นรนกับปัญหานี้ในช่วงสองสามวันที่ผ่านมาและได้เขียนยูทิลิตี้. NET ขนาดเล็กเพื่อแยกและทำให้ไฟล์ Excel เป็นปกติในลักษณะที่ง่ายต่อการจัดเก็บในการควบคุมแหล่งที่มา ฉันได้เผยแพร่ไฟล์ปฏิบัติการที่นี่:
https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe
.. และที่มา:
https://bitbucket.org/htilabs/ooxmlunpack
หากมีความสนใจใด ๆ ฉันยินดีที่จะทำให้สิ่งนี้สามารถกำหนดค่าได้มากขึ้น แต่ในขณะนี้คุณควรวางไฟล์ปฏิบัติการไว้ในโฟลเดอร์ (เช่นรูทของที่เก็บต้นทางของคุณ) และเมื่อคุณเรียกใช้มันจะ:
- สแกนโฟลเดอร์และโฟลเดอร์ย่อยเพื่อหาไฟล์. xlsx และ. xlsm
- ถ่ายสำเนาไฟล์เป็น * .orig
- แตกไฟล์แต่ละไฟล์และซิปใหม่โดยไม่มีการบีบอัด
- พิมพ์ไฟล์ใด ๆ ในไฟล์เก็บถาวรซึ่งเป็น XML ที่ถูกต้อง
- ลบไฟล์ calcchain.xml ออกจากไฟล์เก็บถาวร (เนื่องจากมีการเปลี่ยนแปลงมากและไม่มีผลต่อเนื้อหาของไฟล์)
- แทรกค่าข้อความที่ไม่ได้จัดรูปแบบไว้ในบรรทัด (มิฉะนั้นจะถูกเก็บไว้ในตารางการค้นหาซึ่งทำให้เกิดการเปลี่ยนแปลงครั้งใหญ่ใน XML ภายในหากมีการแก้ไขแม้แต่เซลล์เดียว
- ลบค่าจากเซลล์ใด ๆ ที่มีสูตร (เนื่องจากสามารถคำนวณได้เมื่อเปิดแผ่นงานในครั้งถัดไป)
- สร้างโฟลเดอร์ย่อย * .extracted ที่มีเนื้อหาไฟล์ zip ที่แยกออกมา
เห็นได้ชัดว่าสิ่งเหล่านี้ไม่จำเป็นทั้งหมด แต่ผลลัพธ์สุดท้ายคือไฟล์สเปรดชีตที่จะยังคงเปิดอยู่ใน Excel แต่จะรองรับการบีบอัดที่แตกต่างกันและเพิ่มขึ้นได้มาก นอกจากนี้การจัดเก็บไฟล์ที่แยกออกมาเช่นกันทำให้ประวัติเวอร์ชันมีความชัดเจนมากขึ้นว่ามีการเปลี่ยนแปลงใดบ้างในแต่ละเวอร์ชัน
หากมีความอยากอาหารอยู่ที่นั่นฉันยินดีที่จะทำให้เครื่องมือสามารถกำหนดค่าได้มากขึ้นเนื่องจากฉันเดาว่าไม่ใช่ทุกคนที่จะต้องการให้แยกเนื้อหาออกหรืออาจจะลบค่าออกจากเซลล์สูตร แต่สิ่งเหล่านี้มีประโยชน์กับฉันมากในขณะนี้
ในการทดสอบสเปรดชีตขนาด 2 MB 'คลายแพ็ก' เป็น 21 MB แต่จากนั้นฉันก็สามารถจัดเก็บได้ห้าเวอร์ชันโดยมีการเปลี่ยนแปลงเล็กน้อยระหว่างแต่ละเวอร์ชันในไฟล์ข้อมูล Mercurial 1.9 MB และแสดงภาพความแตกต่างระหว่างเวอร์ชันได้อย่างมีประสิทธิภาพโดยใช้Beyond Compareใน โหมดข้อความ
หมายเหตุ: แม้ว่าฉันจะใช้ Mercurial แต่ฉันอ่านคำถามนี้ในขณะที่ค้นคว้าวิธีแก้ปัญหาของฉันและไม่มีอะไรที่เฉพาะเจาะจงเกี่ยวกับ Mercurial เกี่ยวกับโซลูชันนี้ควรใช้งานได้ดีกับ Git หรือ VCS อื่น ๆ