Git diff kullanarak iki e-tablonun okunabilir farkını nasıl oluştururum?


168

Kaynak kodu depomuzda çok fazla e-tablo (xls) var. Bunlar genellikle gnumeric veya openoffice.org ile düzenlenir ve çoğunlukla dbUnit ile birim testi için veritabanlarını doldurmak için kullanılır . Bildiğim xls dosyalarında diffs yapmanın kolay bir yolu yoktur ve bu, birleştirmeyi son derece sıkıcı ve hataya eğilimli hale getirir.

E-tabloları xml'ye dönüştürmeye ve düzenli bir fark yapmaya çalıştım, ancak gerçekten son çare olması gerektiği gibi geliyor.

gitMetin dosyalarıyla yaptığım gibi farklı (ve birleştirme) yapmak istiyorum. Bunu nasıl yaparım, örneğin yayınlarken git diff?


4
Etiketler birim test ve dbunit burada yanlış uygulanır düşünüyorum. Soru, belirli bir dosya formatı için dosya karşılaştırmasıyla ilgilidir ve birim testi ile ilgisi yoktur.
Hamish Smith

1
Bir cevap değil (Excel gerektirir ve ticari bir üründür) ama GooBinghoo tarafından getirilen insanlar için - formulalasoft.com/excel-compare.html benim için iyi çalışıyor.
CAD bloke

1
Git için check-in yaptığımız farklı Excel için bu Python komut dosyasını kullanıyorum. Bu GO kodunu (Perl'den taşındı) Python'a taşıdım : github.com/tokuhirom/git-xlsx-textconv#see-also Kullanmanıza izin verir git diffvegitk
nmz787


Gitmenin basit bir yolu, her iki e-tablonun verilerini CSV / metin olarak dışa aktarmak ve düzenli bir fark (tercih ettiğiniz düzenleyici veya fark dosyalarınızla)
PPC

Yanıtlar:


109

Aynı sorunla ortak çalışmalarımızda da karşılaştık. Bizim test çıktı excel çalışma kitapları. İkili fark bir seçenek değildi. Böylece kendi basit komut satırı aracımızı kullanıma sunduk. ExcelCompare projesine göz atın . Bu, testlerimizi oldukça iyi bir şekilde otomatikleştirmemizi sağlar. Yamalar / Özellik istekleri oldukça hoş geldiniz!


2
@KimStacks yes tüm xls, xlsx, ods için çalışır. Ve herhangi bir türü diğeriyle karşılaştırabiliriz, örneğin xls v / s xlsx.
na_ka_na

1
Harika bir araç ... ancak bazı mükemmel geçerli xls dosyaları için "Diff başarısız oldu: excel dosyası olarak okunamadı:" yazıyor. Herkes için (diğer tüm açılardan çok daha fakir) bir alternatif arayanlar için: bkz. Github.com/toobaz/xlrd_diff
Pietro Battiston

2
@PietroBattiston pls github bir bilet günlüğü ve ben bakacağım.
na_ka_na

@na_ka_na Bu aracı oluşturduğunuz için teşekkür ederiz!
jgpawletko

111

Harici araç kullanmadan hızlı ve kolay, karşılaştırdığınız iki sayfa benzer olduğu sürece iyi çalışır:

  • Üçüncü bir e-tablo oluşturun
  • Tür =if(Sheet1!A1 <> Sheet2!A1, "X", "")üst sol hücreye (veya eşdeğeri: klik gerçek hücreler üzerinde otomatik referanslar formül yerleþtirdiðiniz kadar)
  • Ctrl+C(kopyala), Ctrl+A(tümünü seç), Ctrl+V(yapıştır) sayfasını doldurmak için.

Sayfalar benzerse, bu elektronik tablo, içinde X bulunan birkaç hücre haricinde boş olacak ve farklılıkları vurgulayacaktır. Neyin farklı olduğunu hızlı bir şekilde görmek için% 40'a çıkın.


6
Bu hücre bazında hücre karşılaştırması yapmıyor mu? Yani sol tarafta üstte fazladan bir satır varsa, kalan tüm satırları (ve hücreleri) farklı verecektir. Eğer böyleyse, bu çok yararlı değildir.
Hammad Khan

1
@Thecrocodilehunter: her zaman en üstteki satırı silebilir ve kalanını karşılaştırabilirsiniz. Farklılıklar çok daha karmaşıksa, elbette farklı bir araca ihtiyacınız var. Bu, Excel'in elektronik tabloyu değiştirdiğinizi söylediğinde ve yanlışlıkla bir alanı düzenlemekten korktuğunuzda olduğu gibi hızlı bir kerelik karşılaştırmalar için kullanışlıdır.
iconoclast

1
Bunu beğendim. X yapmak yerine, "1" de yapabilir ve ilk satır ve sütunlar için bir TOPLA'ya sahip olabilirsiniz. İlk alana som ekleyin ve kaç alanın farklı olduğunu hızlı bir şekilde göreceksiniz.
Konerak

5
Formülü biraz değiştirdim, bu yüzden kesin farklılıkların ne olduğuna bakmak zorunda kalmadım. = EĞER (Sayfa1! A1 <> Sayfa2! A1, BİRLEŞTİR ("Sayfa 1 =", Sayfa1! A1, "Sayfa 2 =", Sayfa2! A1), "")
Martyn

1
Sadece yazabilirsiniz =Sheet1!A1=Sheet2!A1. Bu DOĞRU veya YANLIŞ yazdırır. Daha sonra koşullu biçimlendirme veya =countif(A1:B2, FALSE)benzeri bir şey yapabilirsiniz.
user2023861

12

Geçmişte Excel çalışma kitaplarını karşılaştırma konusunda çok şey yaptım. Benim tekniğim birçok çalışma sayfası olan çalışma kitapları için çok iyi çalışıyor, ancak sadece hücre içeriğini karşılaştırıyor, hücre biçimlendirmesini, makroları vb. Karşılaştırmıyor. Ayrıca, bazı kodlamalar da var, ancak birçok büyük dosyayı tekrar tekrar karşılaştırmanız gerekiyorsa buna değer. Şöyle çalışır:

A) Tüm çalışma sayfalarında dolaşan ve tüm verileri sekmeyle ayrılmış dosyalara kaydeden basit bir döküm programı yazın. Çalışma sayfası başına bir dosya oluşturun (çalışma sayfası adını dosya adı olarak kullanın, örneğin "MyWorksheet.tsv") ve programı her çalıştırdığınızda bu dosyalar için yeni bir klasör oluşturun. Klasörü excel dosya adından sonra adlandırın ve bir zaman damgası ekleyin, örneğin "20080922-065412-MyExcelFile". Bunu Java'da JExcelAPI adlı bir kitaplık kullanarak yaptım . Gerçekten çok kolay.

B) Bir Excel dosyasına sağ tıkladığınızda A adımından itibaren yeni Java programınızı çalıştırmak için bir Windows kabuk uzantısı ekleyin. Bu, bu programı çalıştırmayı çok kolaylaştırır. Google'a bunu nasıl yapacağınız gerekir, ancak bir * .reg dosyası yazmak kadar kolaydır.

C) Karşılaşın . Sınırlandırılmış verileri güzel bir tabloda göstererek karşılaştırmak için çok güzel bir özelliği vardır, ekran görüntüsüne bakın .

D) Artık Excel dosyalarını kolaylıkla karşılaştırmaya hazırsınız. Excel dosyası 1'e sağ tıklayın ve döküm programınızı çalıştırın. Her çalışma sayfası için bir dosya içeren bir klasör oluşturur. Excel dosyası 2'ye sağ tıklayın ve döküm programınızı çalıştırın. Her çalışma sayfası için bir dosya içeren ikinci bir klasör oluşturur. Şimdi klasörleri karşılaştırmak için BeyondCompare (BC) kullanın. Her dosya bir çalışma sayfasını temsil eder, bu nedenle BC çalışma sayfasında farklılıklar varsa bunu gösterecek ve bir detaylandırma ve dosya karşılaştırması yapabilirsiniz. BC karşılaştırmayı güzel bir tablo düzeninde gösterir ve ilgilenmediğiniz satırları ve sütunları gizleyebilirsiniz.


12

Bu ücretsiz çevrimiçi aracı deneyebilirsiniz - www.cloudyexcel.com/compare-excel/

Eklenen, silinen, değiştirilen satırlar açısından çevrimiçi olarak iyi bir görsel çıktı verir.

resim açıklamasını buraya girin

Ayrıca bir şey yüklemeniz gerekmez.


Ne yazık ki sadece <2MB dosyalar için çalışır. Her neyse, başka biri için işe yarayabilir.
MikeVelazco

10

Xdocdiff WinMerge Eklentisi buldum . Bu WinMerge (her ikisi için bir eklenti olduğunu OpenSource ve SORULAR , bir VBA yazmak ne de csv veya xml bir excel kurtarmaya gerekmez). Sadece celd'in içeriği için çalışır.

Bu eklenti şunları da destekler:

  • .rtf Zengin Metin
  • .docx / .docm Microsoft WORD 2007 (OOXML)
  • .xlsx / .xlsm Microsoft Excel 2007 (OOXML)
  • .pptx / .pptm Microsoft PowerPoint 2007 (OOXML)
  • .doc Microsoft WORD ver5.0 / 95/97/2000 / XP / 2003
  • .xls Microsoft Excel ver5.0 / 95/97/2000 / XP / 2003
  • .ppt Microsoft PowerPoint 97/2000 / XP / 2003
  • .sxw / .sxc / .sxi / .sxd OpenOffice.org
  • .odt / .ods / .odp / .odg Belgeyi Aç
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • .wri Windows3.1 Yazma
  • .pdf Adobe PDF
  • .mht Web Arşivi
  • .eml OutlookExpress'ten dışa aktarılan dosyalar

Saygılarımızla, Andres


1
Maalesef, paketi açılmış dosyalarda yapılan değişikliklerin kaydedilmesine izin vermediğinden, birleştirme için yararlı değildir. Yine de ücretsiz.
Sogger

6

Hmmm. Excel menüsünden Pencere -> Yan yana karşılaştır?


+1 iyi çalışıyor, ancak office 2007'deki farklılıkları vurgulamıyor. Sanırım eski sürümlerde. Görsel karşılaştırma için hala çok iyi.
Hammad Khan

2
evet, vurgulama yoktur, bu yüzden tek fayda senkron kaydırmadır.
Sogger

5

TortoiseSVN'yi alt sürümde taahhütlerinizi ve güncellemelerinizi yapmak için kullanıyor musunuz? Farklı bir araç var, ancak Excel dosyalarını karşılaştırmak hala gerçekten kullanıcı dostu değil. Ortamımda (Win XP, Office 2007), yan yana karşılaştırma için iki excel dosyası açar.

Belgeye sağ tıklayın> Tortoise SVN> Günlüğü Göster> düzeltmeyi seçin> "Çalışan kopyayla karşılaştır" için sağ tıklayın.


4

MS Office'in daha yeni sürümleri, GUI'de oldukça güzel bir fark gösteren Spreadsheet Compare ile birlikte gelir . Çoğu değişiklik türünü algılar.


Bu yanıt muhtemelen OP'nin komut satırı tabanlı diffbirleştirme ile ilgili durumuna yardımcı olmasa da , bu Elektronik Tablo Karşılaştırma aracı benim amacım için mükemmeldi (Excel COM otomasyon çıkışı ile OpenXML otomasyon çıkışı arasındaki farkları kontrol etmek için).
ErrCode

Not: Bu aracı kullanarak otomasyonu araştırmaya çalıştım, ancak benim için işe yaramadı (araç çökmeye devam etti): stackoverflow.com/a/35905262/7270462
ErrCode

4

Kütüphane nergis varTabloların karşılaştırılmasına, farklarının bir özetinin oluşturulmasına ve böyle bir özetin yama dosyası olarak kullanılmasına yardımcı olan (veri farkı kısaltması) vardır.

Haxe dilinde yazılmıştır, böylece büyük dillerde derlenebilir.

Bu kütüphane yardımıyla Javascript'te bir Excel Diff Aracı yaptım . Sayılar ve küçük dizelerle iyi çalışır, ancak çıktı uzun dizeler için ideal değildir (örneğin küçük karakter değişimli uzun bir cümle).


3

Birkaç yanıt dosyayı csv veya başka bir metin biçimine dışa aktarmayı ve sonra bunları karşılaştırma önerdi biliyorum. Özellikle bahsettiğimi görmedim, ancak Beyond Compare 3 desteklediği bir dizi ek dosya formatına sahip. Bkz. Ek Dosya Biçimleri . Microsoft Excel Dosya Biçimlerinden birini kullanarak iki Excel dosyasını başka bir biçime dışa aktar seçeneğinden geçmeden kolayca karşılaştırabilirsiniz.


2

Diffs gerçekleştirilmesi önemliyse SYLK dosya biçimini kullanırdım. Karşılaştırmaları ikili biçime göre daha kolay ve kompakt hale getirmesi gereken metin tabanlı bir biçimdir. Excel, Gnumeric ve OpenOffice.org ile de uyumludur, bu nedenle üç aracın da birlikte çalışabilmesi gerekir. SYLK Wikipedia Makalesi


Bu genellikle Excel dosyaları (ve diğer dosyalar) ile git kullanan ortamlarda yaygın bir uygulama olarak benimsenmesi gereken harika bir çözümdür. Kesinlikle "git" dostu (diffs süper insan tarafından okunabilir olmasa da) ve "modern" Excel'in ötesinde herhangi bir ekstra araç gerektirmez (şimdi 2019'dur). Ayrıca "iki yönlüdür", diğer kullanıcıların Excel elektronik tablolarını .slk (SYLK) biçiminde kaydedebileceği ve daha sonra gerektiğinde Excel'de tüm uygun biçimlendirme vb.İle açabilecekleri anlamına gelir.
D. Woods

2

Altova DiffDog kullanın

Farkları okunması kolay bir tablo formatında incelemek için diffdog'un XML fark modunu ve Izgara Görünümünü kullanın. Metin farklılığı, herhangi bir karmaşıklığa sahip e-tablolar için ÇOK SERTLİKTİR. Bu araçla, çeşitli koşullar altında en az iki yöntem uygulanabilir.

  1. .Xml Olarak Kaydet

    Basit, tek sayfalık bir e-tablonun farklarını tespit etmek için, Excel e-tablolarını .xml uzantısıyla XML E-Tablo 2003 ile karşılaştırmak üzere kaydedin.

  2. Farklı Kaydet .xlsx

    Modülerleştirilmiş bir belge modelindeki çoğu e-tablodaki farkları saptamak için, Excel e-tablolarını .xlsx biçiminde bir Excel Çalışma Kitabı olarak karşılaştırmak üzere kaydedin. Diffdog ile diff dosyalarını açın. Dosyanın ZIP arşivi olduğunu bildirir ve dizin karşılaştırması için açmak isteyip istemediğinizi sorar. Dizin karşılaştırmasını kabul ettikten sonra, belgenin mantıksal bölümlerini birbirinden ayırmak (XML fark modu ile) nispeten basit bir konu haline gelir. .Xslx belgesinin çoğu bölümü XML biçimli verilerdir. Izgara Görünümü son derece kullanışlıdır. Analizleri değiştiği bilinen alanlara odaklamak için ayrı ayrı sayfalar ayırmak önemsizdir.

Excel'in belirli kayıt adlarını her kaydetmeyle değiştirmeye eğilimi can sıkıcıdır, ancak diffdog'un XML farklı yetenekleri, bazı farklılıkları filtreleme yeteneğini içerir. Örneğin, XML biçimindeki Excel elektronik tabloları rowvecs her kaydetmeyle yeniden adlandırılan özniteliklere (stil) sahip öğeler . Bir filtre oluşturmak c:s, yalnızca içerik değişikliklerini görüntülemeyi çok daha kolay hale getirir.

diffdog'un birçok farklı özelliği vardır. XML fark modlarını sadece Excel belgelerini farklılaştırmak söz konusu olduğunda daha sevdiğim başka bir araç kullanmadığım için listeledim.


1

Burada iki dosyada openoffice'in belgeleri karşılaştır işlevini çağıracak bir openoffice makrosu buldum . Ne yazık ki, openoffice'in elektronik tablo karşılaştırması biraz lapa lapa gibi görünüyor; Belgeme 'Tümünü Reddet' düğmesine gereksiz bir sütun eklemiştim.


1

SVN için xdocdiff eklentisi


xdocdiff güzel görünüyor, ancak TortioseSVN gerektiriyor gibi görünüyor
neu242

xdocdiff'in de WinMerge eklentisi var, her ikisi de sahne arkasında xdoc2txt kullanıyor
Sogger

1

Java kullanıyorsanız, basit excel'i deneyebilirsiniz .

Hamcrest eşleştiricileri kullanarak elektronik tabloları dağıtır ve bunun gibi bir çıktı üretir.

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)

Bu aracı yazdığımızı kabul etmeliyim (işaretli cevap kendi gibi yuvarlanmış gibi).


2
Cevabınızı gönderdiğiniz için teşekkürler! Lütfen Kendi Kendini Tanıtma ile ilgili SSS bölümünü dikkatle okuyun. Ayrıca , kendi sitenize / ürününüze her bağlandığınızda bir feragatname yayınlamanız gerektiğini unutmayın .
Andrew Barber

1

TortoiseSVN'niz varsa CTRL , Windows Gezgini'nde seçmek için iki dosyayı tıklatıp ardından TortoiseSVN-> Diff'i sağ tıklatabilirsiniz.

Büyük bir veri kümesinde küçük bir değişiklik arıyorsanız bu özellikle işe yarar.


Bu mu değil böyle Excel XLS biçimi olarak ikili dosyalar için, ancak, genellikle iyi çalışır.
Charles Wood

1
@CharlesWood - aslında yapar özellikle işe yaramaktadır. Kaplumbağa farkı sağlamak için Excel'in kendisini kullanır ve farklı hücreleri kırmızı renkle vurgular. Ben denemedim ama aynı zamanda Word aynı .doc ve .docx dosyaları için fark eminim (diff görüntüleyici olarak Word kullanarak).
Chris B

Whaaat! Benimki bunu yapmaz. Yeni bir özellik mi yoksa bir eklenti mi kurdunuz?
Charles Wood

:-D TortoiseSVN 1.7.12 var ve bunu kutudan çıkarıyor. Yardım dosyası bunun için desteğe sahip olduğunu belirtir - tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html . Makinemde C: \ Program Files \ TortoiseSVN \ Diff-Scripts \ diff-xls.js olan dosyaları dağıtmak için bir komut dosyası kullanır. Makinenizde komut dosyasını devre dışı bırakmış bir grup ilkeniz olması mümkün mü?
Chris B

1

Senin gibi problemim var, bu yüzden bana yardım etmek için küçük bir araç yazmaya karar verdim. Lütfen ExcelDiff_Tools'u kontrol edin . Birkaç önemli nokta ile birlikte gelir:

  • Destek xls, xlsx, xlsm.
  • Formül hücresi ile. Hem formül hem de değeri karşılaştıracaktır.
  • UI ile standart fark metin görüntüleyici gibi görünmeye çalışın: değiştirildi, silindi, eklendi, değişmedi durumu. Lütfen aşağıdaki resme bir göz atın örneğin: resim açıklamasını buraya girin


0

Diff Doc aradığınız şey olabilir.

  • MS Word (DOC, DOCX vb.), Excel, PDF, Zengin Metin (RTF), Metin, HTML, XML, PowerPoint veya Wordperfect belgelerini karşılaştırın ve biçimlendirmeyi koruyun
  • Herhangi bir belgenin (dosyanın) herhangi bir bölümünü seçin ve aynı veya farklı belgenin (dosyanın) herhangi bir bölümü ile karşılaştırın.

2
Diff Doc sadece pencereler ve kapalı kaynak, gerçekten benim ihtiyaçlarına uymuyor.
neu242

0

Herhangi bir araç bilmiyorum, ancak akla gelen iki rulolu çözüm var, her ikisi de Excel gerektiriyor:

  1. İki Çalışma Kitabının her bir Çalışma Sayfası, Satır, Sütun ve Hücresi boyunca adımlarla farklılık gösteren raporlar içeren bir VBA kodu yazabilirsiniz.

  2. Excel 2007 kullanıyorsanız, Çalışma Kitaplarını Açık XML (* .xlsx) biçimi olarak kaydedebilir, XML'yi ayıklayabilirsiniz ve bunu farklılaştırabilirsiniz. Open-XML dosyası aslında sadece .xml dosyalarının ve bildirimlerinin bir .zip dosyasıdır.

E-tablolarınız başlamak için yapısal olarak "yakın" değilse, her iki durumda da çok fazla "gürültü" elde edersiniz.


Excel 2002'den itibaren xlsx dosyalarıyla uğraşmaktan daha basit olan 'XML Elektronik Tablosu' biçiminde de kaydedebilirsiniz.
Sam Warwick

0

CVS dönüştürmek sonra bir sürüm kontrol sistemine yükleyin sonra gelişmiş bir sürüm kontrolü fark aracı ile fark. Performansı kullandığımda harika bir fark aracı vardı, ama adını unuttum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.