Wie erstelle ich mit git diff ein lesbares Diff aus zwei Tabellen?


168

Wir haben viele Tabellenkalkulationen (xls) in unserem Quellcode-Repository. Diese werden normalerweise mit gnumeric oder openoffice.org bearbeitet und meistens zum Auffüllen von Datenbanken für Unit-Tests mit dbUnit verwendet . Es gibt keine einfachen Möglichkeiten, Unterschiede bei mir bekannten XLS-Dateien zu machen, und dies macht das Zusammenführen äußerst mühsam und fehleranfällig.

Ich habe versucht, die Tabellen in XML zu konvertieren und einen regulären Diff zu machen, aber es fühlt sich wirklich so an, als ob es ein letzter Ausweg sein sollte.

Ich möchte das Differenzieren (und Zusammenführen) mit gitTextdateien durchführen. Wie würde ich das tun, zB beim Ausstellen git diff?


4
Ich denke, die Tags Unit-Test und DBUNIT werden hier falsch angewendet. Die Frage bezieht sich auf den Dateivergleich für ein bestimmtes Dateiformat und hat nichts mit Unit-Tests zu tun.
Hamish Smith

1
Keine Antwort (es erfordert Excel & ist ein kommerzielles Produkt), aber für Leute, die von GooBinghoo hierher gebracht wurden - formulasoft.com/excel-compare.html funktioniert gut für mich.
CAD Kerl

1
Ich benutze dieses Python-Skript, um Excel zu unterscheiden, das wir in git einchecken. Ich portiert diese GO - Code zu Python (die von Perl portiert wurde): github.com/tokuhirom/git-xlsx-textconv#see-also Es Sie verwenden können git diffundgitk
nmz787


Ein einfacher Weg wäre, die Daten beider Tabellen als CSV / Text zu exportieren und einen regulären Diff (mit Ihrem bevorzugten Editor oder Diff-Dateien)
durchzuführen

Antworten:


109

Wir hatten genau das gleiche Problem in unserer Zusammenarbeit. Unsere Tests geben Excel-Arbeitsmappen aus. Binärdiff war keine Option. Also haben wir unser eigenes einfaches Kommandozeilen-Tool eingeführt. Überprüfen Sie das ExcelCompare-Projekt . Tatsächlich können wir so unsere Tests sehr gut automatisieren. Patches / Feature-Anfragen sind herzlich willkommen!


2
@KimStacks yes funktioniert für alle xls, xlsx, ods. Und kann sogar einen beliebigen Typ mit dem anderen vergleichen, z. B. xls v / s xlsx.
na_ka_na

1
Tolles Tool ... aber es heißt "Diff fehlgeschlagen: Fehler beim Lesen als Excel-Datei:" für einige perfekt gültige XLS-Dateien. Für alle, die nach einer (aus allen anderen Gesichtspunkten viel ärmeren) Alternative suchen: siehe github.com/toobaz/xlrd_diff
Pietro Battiston

2
@PietroBattiston pls log ein Ticket in Github und ich werde es mir ansehen.
na_ka_na

@na_ka_na Vielen Dank, dass Sie dieses Tool erstellt haben!
jgpawletko

111

Schnell und einfach ohne externe Tools, funktioniert gut, solange die beiden Blätter, die Sie vergleichen, ähnlich sind:

  • Erstellen Sie eine dritte Tabelle
  • Geben Sie =if(Sheet1!A1 <> Sheet2!A1, "X", "")die obere linke Zelle ein (oder gleichwertig: Klicken Sie auf die tatsächlichen Zellen, um die Referenzen automatisch in die Formel einzufügen).
  • Ctrl+C(kopieren), Ctrl+A(alle auswählen), Ctrl+V(einfügen), um das Blatt zu füllen.

Wenn die Blätter ähnlich sind, ist dieses Arbeitsblatt bis auf einige Zellen mit X leer, wodurch die Unterschiede hervorgehoben werden. Verkleinern Sie die Ansicht auf 40%, um schnell zu erkennen, was anders ist.


6
Ist das nicht ein zellweiser Vergleich? Ich meine, wenn die linke Seite oben eine zusätzliche Reihe hat, werden alle verbleibenden Reihen (und Zellen) unterschiedlich sein. Wenn es so ist, ist das nicht sehr nützlich.
Hammad Khan

1
@Thecrocodilehunter: Sie können diese Zeile oben immer löschen und dann den Rest vergleichen. Wenn die Unterschiede viel komplexer sind, benötigen Sie natürlich ein anderes Werkzeug. Dies ist nützlich für schnelle einmalige Vergleiche, z. B. wenn Excel angibt, dass Sie die Tabelle geändert haben und befürchten, versehentlich ein Feld bearbeitet zu haben.
Bilderstürmer

1
Ich mochte diesen. Anstelle von X können Sie auch "1" ausführen und eine SUMME als erste Zeilen und Spalten verwenden. Fügen Sie dem ersten Feld ein Som hinzu, und Sie werden schnell sehen, wie viele Felder sich unterscheiden.
Konerak

5
Ich habe die Formel ein wenig geändert, damit ich nicht nach den genauen Unterschieden suchen musste. = IF (Blatt1! A1 <> Blatt2! A1, CONCATENATE ("Blatt 1 =", Blatt1! A1, "Blatt 2 =", Blatt2! A1), "")
Martyn

1
Sie können einfach tippen =Sheet1!A1=Sheet2!A1. Dies gibt TRUE oder FALSE aus. Sie können dann eine bedingte Formatierung oder =countif(A1:B2, FALSE)ähnliches durchführen.
user2023861

12

Ich habe in der Vergangenheit viele Excel-Arbeitsmappen verglichen. Meine Technik funktioniert sehr gut für Arbeitsmappen mit vielen Arbeitsblättern, vergleicht jedoch nur den Zellinhalt, nicht die Zellformatierung, Makros usw. Außerdem ist einige Codierung erforderlich, aber es lohnt sich, wenn Sie viele große Dateien wiederholt vergleichen müssen. So funktioniert das:

A) Schreiben Sie ein einfaches Dump-Programm, das alle Arbeitsblätter durchläuft und alle Daten in durch Tabulatoren getrennten Dateien speichert. Erstellen Sie eine Datei pro Arbeitsblatt (verwenden Sie den Arbeitsblattnamen als Dateinamen, z. B. "MyWorksheet.tsv"), und erstellen Sie bei jedem Ausführen des Programms einen neuen Ordner für diese Dateien. Benennen Sie den Ordner nach dem Excel-Dateinamen und fügen Sie einen Zeitstempel hinzu, z. B. "20080922-065412-MyExcelFile". Ich habe dies in Java mit einer Bibliothek namens JExcelAPI gemacht . Es ist wirklich ganz einfach.

B) Fügen Sie eine Windows-Shell-Erweiterung hinzu, um Ihr neues Java-Programm ab Schritt A auszuführen, wenn Sie mit der rechten Maustaste auf eine Excel-Datei klicken. Dies macht es sehr einfach, dieses Programm auszuführen. Sie müssen Google, wie das geht, aber es ist so einfach wie das Schreiben einer * .reg-Datei.

C) Holen Sie sich BeyondCompare . Es hat eine sehr coole Funktion, um begrenzte Daten zu vergleichen, indem es in einer schönen Tabelle angezeigt wird ( siehe Screenshot) .

D) Sie können jetzt problemlos Excel-Dateien vergleichen. Klicken Sie mit der rechten Maustaste auf Excel-Datei 1 und führen Sie Ihr Dump-Programm aus. Es wird ein Ordner mit einer Datei pro Arbeitsblatt erstellt. Klicken Sie mit der rechten Maustaste auf Excel-Datei 2 und führen Sie Ihr Dump-Programm aus. Es wird ein zweiter Ordner mit einer Datei pro Arbeitsblatt erstellt. Verwenden Sie nun BeyondCompare (BC), um die Ordner zu vergleichen. Jede Datei stellt ein Arbeitsblatt dar. Wenn es also Unterschiede in einem Arbeitsblatt gibt, zeigt BC dies an und Sie können einen Drilldown durchführen und einen Dateivergleich durchführen. BC zeigt den Vergleich in einem schönen Tabellenlayout an, und Sie können Zeilen und Spalten ausblenden, an denen Sie nicht interessiert sind.



10

Ich habe das xdocdiff WinMerge Plugin gefunden . Es ist ein Plugin für WinMerge (sowohl OpenSource als auch Freeware , Sie müssen weder eine VBA schreiben noch ein Excel in CSV oder XML speichern). Es funktioniert nur für die Celds enthält.

Dieses Plugin unterstützt auch:

  • .rtf Rich Text
  • .docx / .docm Microsoft WORD 2007 (OOXML)
  • .xlsx / .xlsm Microsoft Excel 2007 (OOXML)
  • PPTX / PPTM Microsoft PowerPoint 2007 (OOXML)
  • .doc Microsoft WORD Version 5.0 / 95/97/2000 / XP / 2003
  • .xls Microsoft Excel Version 5.0 / 95/97/2000 / XP / 2003
  • PPT Microsoft PowerPoint 97/2000 / XP / 2003
  • .sxw / .sxc / .sxi / .sxd OpenOffice.org
  • .odt / .ods / .odp / .odg Dokument öffnen
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • .wri Windows3.1 Schreiben
  • .pdf Adobe PDF
  • .mht Webarchiv
  • .eml Exportierte Dateien aus OutlookExpress

Grüße, Andres


1
Leider können Änderungen an den entpackten Dateien nicht gespeichert werden, sodass das Zusammenführen nicht sinnvoll ist. Es ist jedoch kostenlos.
Sogger

6

Hmmm. Wählen Sie im Excel-Menü Fenster -> Nebeneinander vergleichen?


+1 funktioniert gut, hebt jedoch keine Unterschiede in Office 2007 hervor. Ich denke, in älteren Versionen ist dies der Fall. Immer noch sehr gut für den visuellen Vergleich.
Hammad Khan

2
Ja, es gibt keine Hervorhebung, daher ist der einzige Vorteil das synchrone Scrollen.
Sogger

5

Verwenden Sie TortoiseSVN, um Ihre Commits und Updates in Subversion durchzuführen? Es hat ein Diff-Tool, aber das Vergleichen von Excel-Dateien ist immer noch nicht wirklich benutzerfreundlich. In meiner Umgebung (Win XP, Office 2007) werden zwei Excel-Dateien für den direkten Vergleich geöffnet.

Klicken Sie mit der rechten Maustaste auf Dokument> Schildkröten-SVN> Protokoll anzeigen> Revision auswählen> Rechtsklick für "Mit Arbeitskopie vergleichen".


4

Neuere Versionen von MS Office verfügen über Spreadsheet Compare , das in einer grafischen Benutzeroberfläche einen recht guten Unterschied darstellt. Es erkennt die meisten Arten von Änderungen.


Obwohl diese Antwort die Situation von OP bei einer diffbefehlszeilenbasierten Zusammenführung wahrscheinlich nicht verbessern wird, war dieses Tool zum Vergleichen von Tabellenkalkulationen perfekt für meine Zwecke (Überprüfung auf Unterschiede zwischen der OpenXML-Automatisierungsausgabe und der Excel COM-Automatisierungsausgabe).
ErrCode

Hinweis: Ich habe versucht, die Automatisierung mit diesem Tool zu untersuchen, aber es hat bei mir nicht funktioniert (das Tool stürzte immer wieder ab): stackoverflow.com/a/35905262/7270462
ErrCode

4

Es gibt einen Bibliotheks- DFFF (kurz für Data Diff), der beim Vergleichen von Tabellen, beim Erstellen einer Zusammenfassung ihrer Unterschiede und beim Verwenden einer solchen Zusammenfassung als Patch-Datei hilft.

Es ist in Haxe geschrieben, sodass es in den wichtigsten Sprachen kompiliert werden kann.

Ich habe mit Hilfe dieser Bibliothek ein Excel Diff-Tool in Javascript erstellt. Es funktioniert gut mit Zahlen und kleinen Zeichenfolgen, aber die Ausgabe ist nicht ideal für lange Zeichenfolgen (z. B. ein langer Satz mit geringfügigen Zeichenänderungen).


3

Ich weiß, dass mehrere Antworten vorgeschlagen haben, die Datei in CSV oder ein anderes Textformat zu exportieren und sie dann zu vergleichen. Ich habe es nicht speziell erwähnt gesehen, aber Beyond Compare 3 bietet eine Reihe zusätzlicher Dateiformate, die es unterstützt. Siehe Zusätzliche Dateiformate . Mit einem der Microsoft Excel-Dateiformate können Sie problemlos zwei Excel-Dateien vergleichen, ohne den Export in ein anderes Format durchführen zu müssen.


2

Ich würde das SYLK-Dateiformat verwenden, wenn es wichtig ist, Unterschiede auszuführen. Es ist ein textbasiertes Format, das die Vergleiche einfacher und kompakter machen soll als ein Binärformat. Es ist auch mit Excel, Gnumeric und OpenOffice.org kompatibel, sodass alle drei Tools gut zusammenarbeiten sollten. SYLK Wikipedia Artikel


Dies ist eine großartige Lösung, die in Umgebungen, in denen häufig Git mit Excel-Dateien (und anderen Dateien) verwendet wird, als gängige Praxis angewendet werden sollte. Es ist definitiv "git" -freundlich (obwohl die Unterschiede nicht super menschlich lesbar sind) und erfordert keine zusätzlichen Tools über "modernes" Excel hinaus (es ist jetzt 2019). Es ist auch "bidirektional", was bedeutet, dass andere Benutzer ihre Excel-Tabellen im SYLK-Format (.slk) speichern und sie dann bei Bedarf mit der richtigen Formatierung usw. in Excel öffnen können.
D. Woods

2

Verwenden Sie Altova DiffDog

Verwenden Sie den XML-Diff-Modus und die Rasteransicht von diffdog, um die Unterschiede in einem leicht lesbaren Tabellenformat zu überprüfen. Textdifferenzierung ist für Tabellenkalkulationen jeder Komplexität VIEL HÄRTER. Mit diesem Tool sind mindestens zwei Methoden unter verschiedenen Umständen realisierbar.

  1. Speichern als .xml

    Speichern Sie die Excel-Tabellen, um sie als XML-Tabelle 2003 mit einer XML-Erweiterung zu vergleichen, um die Unterschiede einer einfachen Tabelle mit einem Blatt zu erkennen.

  2. Speichern unter .xlsx

    Speichern Sie die Excel-Tabellen, um sie als Excel-Arbeitsmappe in XLSX-Form zu vergleichen, um die Unterschiede der meisten Tabellenkalkulationen in einem modularisierten Dokumentmodell zu erkennen. Öffnen Sie die Dateien, um sie mit diffdog zu unterscheiden. Sie werden darüber informiert, dass es sich bei der Datei um ein ZIP-Archiv handelt, und gefragt, ob Sie sie zum Verzeichnisvergleich öffnen möchten. Wenn Sie dem Verzeichnisvergleich zustimmen, ist es relativ einfach, auf logische Teile des Dokuments zu doppelklicken, um sie zu unterscheiden (im XML-Diff-Modus). Die meisten Teile des .xslx-Dokuments sind XML-formatierte Daten. Die Rasteransicht ist äußerst nützlich. Es ist trivial, einzelne Blätter zu unterscheiden, um die Analyse auf Bereiche zu konzentrieren, von denen bekannt ist, dass sie sich geändert haben.

Die Neigung von Excel, bestimmte Attributnamen bei jedem Speichern zu ändern, ist ärgerlich, aber die XML-Diffing-Funktionen von diffdog umfassen die Möglichkeit, bestimmte Arten von Unterschieden zu filtern. Zum Beispiel, Excel - Tabellen in XML - Form enthalten rowund cElemente , die haben sAttribute (Stil) , die Umbenennungs mit jedem Speichern. Das Einrichten eines Filters wie c:serleichtert das Anzeigen nur von Inhaltsänderungen erheblich.

diffdog hat viele unterschiedliche Fähigkeiten. Ich habe die XML-Diff-Modi nur aufgelistet, weil ich kein anderes Tool verwendet habe, das mir beim Differenzieren von Excel-Dokumenten besser gefallen hat.


1

Ich habe hier ein Openoffice-Makro gefunden , das die Funktion zum Vergleichen von Dokumenten von openoffice für zwei Dateien aufruft. Leider scheint der Tabellenvergleich von openoffice ein wenig schuppig zu sein. Ich habe gerade die Schaltfläche "Alle ablehnen" eine überflüssige Spalte in mein Dokument einfügen lassen.


1

xdocdiff Plugin für SVN


xdocdiff sieht gut aus, aber es scheint TortioseSVN
neu242

xdocdiff hat auch ein WinMerge-Plugin, beide verwenden xdoc2txt hinter den Kulissen
Sogger

1

Wenn Sie Java verwenden, können Sie simple-excel ausprobieren .

Es wird Tabellenkalkulationen mit Hamcrest-Matchern unterscheiden und so etwas ausgeben.

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)

Ich sollte mich qualifizieren, dass wir dieses Tool geschrieben haben (wie die angekreuzte Antwort ihre eigene rollte).


2
Vielen Dank für Ihre Antwort! Bitte lesen Sie die FAQ zur Eigenwerbung sorgfältig durch. Beachten Sie auch , dass Sie jedes Mal, wenn Sie auf Ihre eigene Website / Ihr eigenes Produkt verlinken, einen Haftungsausschluss veröffentlichen müssen.
Andrew Barber

1

Wenn Sie TortoiseSVN haben, können CTRLSie auf die beiden Dateien klicken, um sie im Windows Explorer auszuwählen, und dann mit der rechten Maustaste auf TortoiseSVN-> Diff klicken.

Dies funktioniert besonders gut, wenn Sie nach einer kleinen Änderung in einem großen Datensatz suchen.


Dies funktioniert jedoch nicht besonders gut für Binärdateien wie das XLS-Format von Excel.
Charles Wood

1
@CharlesWood - eigentlich ist es tut besonders gut zu arbeiten. Tortoise verwendet Excel selbst, um das Diff bereitzustellen, und hebt die verschiedenen Zellen rot hervor. Ich habe es nicht ausprobiert, aber ich bin mir ziemlich sicher, dass es auch für Word-DOC- und DOCX-Dateien funktioniert (mit Word als Diff-Viewer).
Chris B

Was! Meins macht das nicht. Ist es eine neue Funktion oder haben Sie ein Plugin installiert?
Charles Wood

:-D Ich habe TortoiseSVN 1.7.12 und es macht es sofort. In der Hilfedatei wird angegeben, dass dies unterstützt wird - tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html . Es verwendet ein Skript, um die Dateien zu unterscheiden, die sich auf meinem Computer als C: \ Programme \ TortoiseSVN \ Diff-Scripts \ diff-xls.js befinden. Ist es möglich, dass Sie auf Ihrem Computer eine Gruppenrichtlinie haben, die die Skripterstellung deaktiviert hat?
Chris B

1

Ich habe das Problem wie Sie und beschließe, ein kleines Tool zu schreiben, um mir zu helfen. Bitte überprüfen Sie ExcelDiff_Tools . Es kommt mit mehreren wichtigen Punkten:

  • Unterstützt xls, xlsx, xlsm.
  • Mit Formelzelle. Es werden sowohl Formel als auch Wert verglichen.
  • Ich versuche, die Benutzeroberfläche wie einen Standard-Diff-Text-Viewer aussehen zu lassen, mit: geändertem, gelöschtem, hinzugefügtem, unverändertem Status. Bitte schauen Sie sich das Bild unten an, zum Beispiel: Geben Sie hier die Bildbeschreibung ein


0

Diff Doc ist möglicherweise das, wonach Sie suchen.

  • Vergleichen Sie Dokumente aus MS Word (DOC, DOCX usw.), Excel, PDF, Rich Text (RTF), Text, HTML, XML, PowerPoint oder Wordperfect und behalten Sie die Formatierung bei
  • Wählen Sie einen beliebigen Teil eines Dokuments (einer Datei) aus und vergleichen Sie ihn mit einem beliebigen Teil desselben oder eines anderen Dokuments (einer Datei).

2
Diff Doc ist nur für Windows und Closed Source, es entspricht wirklich nicht meinen Anforderungen.
Neu242

0

Ich kenne keine Tools, aber es gibt zwei Roll-Your-Own-Lösungen, die beide in den Sinn kommen. Beide erfordern Excel:

  1. Sie können einen VBA-Code schreiben, der die einzelnen Arbeitsblätter, Zeilen, Spalten und Zellen der beiden Arbeitsmappen durchläuft und Unterschiede meldet.

  2. Wenn Sie Excel 2007 verwenden, können Sie die Arbeitsmappen als Open-XML-Format (* .xlsx) speichern, das XML extrahieren und das unterscheiden. Die Open-XML-Datei ist im Wesentlichen nur eine ZIP-Datei mit XML-Dateien und Manifesten.

Sie werden in beiden Fällen viel "Rauschen" haben, wenn Ihre Tabellenkalkulationen zunächst nicht strukturell "nah" sind.


Ab Excel 2002 können Sie auch im XML-Tabellenformat speichern, das einfacher ist als der Umgang mit XLSX-Dateien.
Sam Warwick

0

In Lebensläufe konvertieren, dann in ein Versionskontrollsystem hochladen und dann mit einem erweiterten Versionskontroll-Diff-Tool diff. Als ich Perforce benutzte, hatte es ein großartiges Diff-Tool, aber ich vergesse den Namen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.