كيف أقوم بإنشاء فرق قابل للقراءة بين جدولي بيانات باستخدام git diff؟

StackOverflow https://stackoverflow.com/questions/114698

سؤال

لدينا الكثير من جداول البيانات (xls) في مستودع كود المصدر الخاص بنا.يتم تحريرها عادةً باستخدام gnumeric أو openoffice.org، وتُستخدم في الغالب لملء قواعد البيانات لاختبار الوحدة باستخدام dbUnit.لا توجد طرق سهلة لإجراء الفروق على ملفات xls التي أعرفها، وهذا يجعل عملية الدمج مملة للغاية وعرضة للأخطاء.

لقد حاولت تحويل جداول البيانات إلى تنسيق XML وإجراء فرق منتظم، ولكن يبدو أن هذا يجب أن يكون الملاذ الأخير.

أرغب في إجراء الاختلاف (والدمج) مع git كما أفعل مع الملفات النصية.كيف أفعل هذا، على سبيل المثال؟عند الإصدار git diff?

هل كانت مفيدة؟

المحلول

لقد واجهنا نفس المشكلة بالضبط في شركتنا.تنتج اختباراتنا مصنفات Excel.لم يكن الفرق الثنائي خيارا.لذلك قمنا بطرح أداة سطر الأوامر البسيطة الخاصة بنا.تفحص ال مشروع ExcelCompare.في الواقع، يتيح لنا هذا أتمتة اختباراتنا بشكل جيد.طلبات التصحيح/الميزات موضع ترحيب كبير!

نصائح أخرى

سريعة وسهلة بدون أدوات خارجية، وتعمل بشكل جيد طالما أن الورقتين اللتين تقارنهما متشابهتان:

  • قم بإنشاء جدول بيانات ثالث
  • يكتب =if(Sheet1!A1 <> Sheet2!A1, "X", "") في الخلية العلوية اليسرى (أو ما يعادلها:انقر على الخلايا الفعلية لإدراج المراجع تلقائيًا في الصيغة)
  • السيطرة + C (ينسخ)، السيطرة + أ (اختر الكل)، السيطرة+V (لصق) لملء الورقة.

إذا كانت الأوراق متشابهة، فسيكون جدول البيانات هذا فارغًا باستثناء بعض الخلايا التي تحتوي على علامة X بداخلها، مما يؤدي إلى إبراز الاختلافات.قم بفك التكبير إلى 40% لرؤية ما هو مختلف بسرعة.

لقد قمت بالكثير من المقارنة بين مصنفات Excel في الماضي.تعمل التقنية الخاصة بي بشكل جيد جدًا مع المصنفات التي تحتوي على العديد من أوراق العمل، ولكنها تقارن فقط محتويات الخلايا، وليس تنسيق الخلايا ووحدات الماكرو وما إلى ذلك.هناك أيضًا بعض الترميز، لكن الأمر يستحق ذلك إذا كان عليك مقارنة الكثير من الملفات الكبيرة بشكل متكرر.وإليك كيف يعمل:

أ) اكتب برنامج تفريغ بسيط يتنقل خلال جميع أوراق العمل ويحفظ جميع البيانات في ملفات مفصولة بعلامات جدولة.أنشئ ملفًا واحدًا لكل ورقة عمل (استخدم اسم ورقة العمل كاسم ملف، على سبيل المثال:"MyWorksheet.tsv")، وقم بإنشاء مجلد جديد لهذه الملفات في كل مرة تقوم فيها بتشغيل البرنامج.قم بتسمية المجلد بعد اسم ملف Excel وأضف طابعًا زمنيًا، على سبيل المثال."20080922-065412-MyExcelFile".لقد فعلت ذلك في Java باستخدام مكتبة تسمى JExcelAPI.انها حقا سهلة للغاية.

ب) أضف ملحق Windows Shell لتشغيل برنامج Java الجديد من الخطوة أ عند النقر بزر الماوس الأيمن على ملف Excel.وهذا يجعل من السهل جدًا تشغيل هذا البرنامج.تحتاج إلى البحث في Google عن كيفية القيام بذلك، ولكن الأمر سهل مثل كتابة ملف *.reg.

ج) الحصول على أبعد من المقارنة.يحتوي على ميزة رائعة جدًا لمقارنة البيانات المحددة من خلال إظهارها في جدول جميل، انظر لقطة الشاشة.

د) أنت الآن جاهز لمقارنة ملفات Excel بسهولة.انقر بزر الماوس الأيمن على ملف Excel 1 وقم بتشغيل برنامج التفريغ.سيتم إنشاء مجلد يحتوي على ملف واحد لكل ورقة عمل.انقر بزر الماوس الأيمن على ملف Excel 2 وقم بتشغيل برنامج التفريغ.سيتم إنشاء مجلد ثانٍ يحتوي على ملف واحد لكل ورقة عمل.استخدم الآن BeyondCompare (BC) لمقارنة المجلدات.يمثل كل ملف ورقة عمل، لذلك إذا كانت هناك اختلافات في ورقة العمل، فسوف يعرض BC ذلك ويمكنك التعمق في الأمر وإجراء مقارنة بين الملفات.سيعرض BC المقارنة في تخطيط جدول جميل، ويمكنك إخفاء الصفوف والأعمدة التي لا تهتم بها.

يمكنك تجربة هذه الأداة المجانية عبر الإنترنت - www.cloudyexcel.com/compare-excel/

إنه يوفر مخرجات مرئية جيدة عبر الإنترنت، من حيث الصفوف المضافة أو المحذوفة أو المتغيرة وما إلى ذلك.

enter image description here

بالإضافة إلى أنك لا تحتاج إلى تثبيت أي شيء.

لقد وجدت البرنامج المساعد xdocdiff WinMerge.وهو مكون إضافي لبرنامج WinMerge (كلاهما مفتوح المصدر و مجانية, ، لا تحتاج إلى كتابة VBA ولا حفظ ملف Excel في ملف CSV أو XML).إنه يعمل فقط من أجل احتواء celd.

يدعم هذا البرنامج المساعد أيضًا:

  • .rtf نص منسق
  • .docx/.docm مايكروسوفت وورد 2007 (OOXML)
  • .xlsx/.xlsm مايكروسوفت إكسل 2007 (OOXML)
  • .pptx/.pptm مايكروسوفت باور بوينت 2007 (OOXML)
  • .doc مايكروسوفت وورد ver5.0/95/97/2000/XP/2003
  • .xls مايكروسوفت إكسل ver5.0/95/97/2000/XP/2003
  • .ppt مايكروسوفت باور بوينت 97/2000/XP/2003
  • .sxw/.sxc/.sxi/.sxd OpenOffice.org
  • .odt/.ods/.odp/.odg افتح المستند
  • .wj2/wj3/wk3/wk4/123 لوتس 123
  • .wri Windows3.1 الكتابة
  • .pdf أدوبي PDF
  • أرشيف الويب .mht
  • .eml الملفات المصدرة من OutlookExpress

تحياتي أندريس

أمم.من قائمة Excel، اختر Window -> مقارنة جنبًا إلى جنب؟

هل تستخدم TortoiseSVN للقيام بالتزاماتك وتحديثاتك في التخريب؟يحتوي على أداة فرق، ولكن مقارنة ملفات Excel لا تزال غير سهلة الاستخدام حقًا.في بيئتي (Win XP وOffice 2007)، يتم فتح ملفين من ملفات Excel للمقارنة جنبًا إلى جنب.

انقر بزر الماوس الأيمن فوق المستند > Tortoise SVN > إظهار السجل > حدد المراجعة > انقر بزر الماوس الأيمن فوق "مقارنة مع نسخة العمل".

أعلم أن العديد من الردود اقترحت تصدير الملف إلى ملف CSV أو أي تنسيق نصي آخر، ثم مقارنتها.لم أره مذكورًا على وجه التحديد، ولكن Beyond Compare 3 لديه عدد من تنسيقات الملفات الإضافية التي يدعمها.يرى تنسيقات الملفات الإضافية.باستخدام أحد تنسيقات ملفات Microsoft Excel، يمكنك بسهولة مقارنة ملفين من ملفات Excel دون المرور عبر خيار التصدير إلى خيار تنسيق آخر.

الإصدارات الأحدث من MS Office تأتي مع مقارنة جدول البيانات, ، والذي يؤدي إلى اختلاف جيد إلى حد ما في واجهة المستخدم الرسومية.يكتشف معظم أنواع التغييرات.

يوجد مكتبة داف (اختصار لـ data diff) والذي يساعد في مقارنة الجداول وإنتاج ملخص لاختلافاتها واستخدام هذا الملخص كملف تصحيح.

إنه مكتوب بلغة Haxe، لذلك يمكن تجميعه باللغات الرئيسية.

لقد قمت بعمل أداة فرق إكسل في جافا سكريبت بمساعدة هذه المكتبة.إنه يعمل بشكل جيد مع الأرقام والسلاسل الصغيرة ولكن الإخراج ليس مثاليًا للسلاسل الطويلة (على سبيل المثال.جملة طويلة مع تغيير طفيف في الحرف).

يستخدم ألتوفا ديف دوج

استخدم وضع فرق XML الخاص بـ diffdog وعرض الشبكة لمراجعة الاختلافات بتنسيق جدولي سهل القراءة.يعد تمييز النص أصعب بكثير بالنسبة لجداول البيانات مهما كانت درجة تعقيدها.باستخدام هذه الأداة، هناك طريقتان على الأقل قابلة للتطبيق في ظل ظروف مختلفة.

  1. حفظ باسم .xml

    لاكتشاف الاختلافات في جدول بيانات بسيط يتكون من ورقة واحدة، احفظ جداول بيانات Excel لمقارنتها كجدول بيانات XML 2003 بامتداد .xml.

  2. حفظ باسم .xlsx

    لاكتشاف الاختلافات بين معظم جداول البيانات في نموذج المستند المعياري، احفظ جداول بيانات Excel لمقارنتها كمصنف Excel في نموذج .xlsx.افتح الملفات للفرق مع diffdog.يخبرك أن الملف عبارة عن أرشيف ZIP، ويسألك عما إذا كنت تريد فتحه لمقارنة الدليل.عند الموافقة على مقارنة الدليل، يصبح الأمر بسيطًا نسبيًا بالنقر المزدوج فوق الأجزاء المنطقية من المستند لتمييزها (باستخدام وضع اختلاف XML).معظم أجزاء مستند .xslx عبارة عن بيانات بتنسيق XML.عرض الشبكة مفيد للغاية.ومن التافه أن نفرق بين الأوراق الفردية لتركيز التحليل على المناطق المعروفة بأنها قد تغيرت.

يعد ميل برنامج Excel إلى تعديل أسماء سمات معينة مع كل عملية حفظ أمرًا مزعجًا، ولكن إمكانيات اختلاف XML الخاصة بـ diffdog تتضمن القدرة على تصفية أنواع معينة من الاختلافات.على سبيل المثال، تحتوي جداول بيانات Excel في نموذج XML على row و c العناصر التي لديها s السمات (النمط) التي يتم إعادة تسميتها مع كل عملية حفظ.إعداد مرشح مثل c:s يجعل من الأسهل بكثير عرض تغييرات المحتوى فقط.

diffdog لديه الكثير من القدرة على الاختلاف.لقد قمت بإدراج أوضاع اختلاف XML فقط لأنني لم أستخدم أداة أخرى أعجبتني أكثر عندما يتعلق الأمر باختلاف مستندات Excel.

سأستخدم تنسيق ملف SYLK إذا كان أداء الفروق أمرًا مهمًا.وهو تنسيق قائم على النص، مما يجعل المقارنات أسهل وأكثر إحكاما من التنسيق الثنائي.وهو متوافق مع Excel وGnumeric وOpenOffice.org أيضًا، لذلك يجب أن تكون الأدوات الثلاثة قادرة على العمل معًا بشكل جيد.مقالة سيلك ويكيبيديا

لقد وجدت ماكرو مفتوح المكتب هنا سيؤدي ذلك إلى استدعاء وظيفة مقارنة المستندات في openoffice على ملفين.لسوء الحظ، تبدو مقارنة جداول البيانات في openoffice غير مستقرة بعض الشيء؛لقد قمت للتو بإدخال الزر "رفض الكل" عمودًا غير ضروري في المستند الخاص بي.

البرنامج المساعد xdocdiff لـ SVN

إذا كنت تستخدم جافا، يمكنك أن تجرب بسيط التفوق.

سيتم فرق جداول البيانات باستخدام أدوات مطابقة Hamcrest وإخراج شيء مثل هذا.

java.lang.AssertionError:
Expected: entire workbook to be equal
     but: cell at "C14" contained <"bananas"> expected <nothing>,
          cell at "C15" contained <"1,850,000 EUR"> expected <"1,850,000.00 EUR">,
          cell at "D16" contained <nothing> expected <"Tue Sep 04 06:30:00">
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)

يجب أن أؤكد أننا كتبنا تلك الأداة (مثل الإجابة المحددة في إجابة خاصة بهم).

إذا كان لديك TortoiseSVN فيمكنك ذلك كنترول انقر فوق الملفين لتحديدهما في Windows Explorer، ثم انقر بزر الماوس الأيمن فوق TortoiseSVN->Diff.

يعمل هذا بشكل جيد بشكل خاص إذا كنت تبحث عن تغيير بسيط في مجموعة بيانات كبيرة.

لقد حصلت على المشكلة مثلك لذلك قررت أن أكتب أداة صغيرة لمساعدتي.يرجى المراجعة ExcelDiff_Tools.ويأتي بعدة نقاط رئيسية:

  • دعم XLS، XLSX، XLSM.
  • مع خلية الصيغة.وسوف يقارن كل من الصيغة والقيمة.
  • أحاول أن أجعل واجهة المستخدم تبدو وكأنها عارض نص مختلف قياسي باستخدام:تعديل، حذف، إضافة، حالة دون تغيير.يرجى إلقاء نظرة على الصورة أدناه على سبيل المثال:enter image description here

وثيقة الفرق قد يكون ما تبحث عنه.

  • قارن مستندات MS Word (DOC، DOCX، إلخ)، Excel، PDF، Rich Text (RTF)، Text، HTML، XML، PowerPoint، أو Wordperfect واحتفظ بالتنسيق
  • اختر أي جزء من أي مستند (ملف) وقارنه بأي جزء من نفس المستند (ملف) أو مختلف.

لا أعرف أي أدوات، ولكن هناك حلان يتبادران إلى ذهنك، وكلاهما يتطلب برنامج Excel:

  1. يمكنك كتابة بعض تعليمات VBA البرمجية التي تتنقل عبر كل ورقة عمل وصف وعمود وخلية في المصنفين، مع الإبلاغ عن الاختلافات.

  2. إذا كنت تستخدم Excel 2007، فيمكنك حفظ المصنفات بتنسيق Open-XML (*.xlsx)، واستخراج XML وتمييزه.يعد ملف Open-XML في الأساس مجرد ملف .zip لملفات وبيانات .xml.

سينتهي بك الأمر بالكثير من "الضجيج" في كلتا الحالتين إذا لم تكن جداول البيانات الخاصة بك "قريبة" من الناحية الهيكلية من البداية.

قم بالتحويل إلى سير ذاتية ثم قم بالتحميل إلى نظام التحكم في الإصدار ثم قم بالفرق باستخدام أداة فرق التحكم في الإصدار المتقدمة.عندما استخدمت بحكم الضرورة كانت لديها أداة فرق رائعة، لكني نسيت اسمها.

أنا المؤلف المشارك لملحق Git المجاني والمفتوح المصدر:

https://github.com/ZoomerAnalytics/git-xltrail

فهو يجعل Git يعمل مع أي تنسيق ملف مصنف Excel دون أي حلول بديلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top