Jak utworzyć czytelne rozróżnienie dwóch arkuszy kalkulacyjnych przy użyciu git diff?

Mamy wiele arkuszy kalkulacyjnych (xls) w naszym repozytorium kodu źródłowego. Są one zwykle edytowane za pomocą gnumeric lub openoffice.org i są najczęściej używane do wypełniania baz danych do testów jednostkowych za pomocą dbUnit. Nie ma łatwych sposobów robienia diffów na plikach xls, które znam, a to sprawia, że łączenie jest niezwykle żmudne i podatne na błędy.

Próbowałem przekonwertować arkusze kalkulacyjne na xml i zrobić zwykły diff, ale naprawdę wydaje mi się, że powinno to być ostatecznością.

I ' d Lubię wykonywać diffing (i scalanie) z git, Jak to robię z plikami tekstowymi. Jak mam to zrobić, np. przy wystawianiu git diff?

Author: pnuts, 2008-09-22

21 answers

Mieliśmy do czynienia z dokładnie tym samym problemem w naszym co. Nasze testy wychodzą skoroszyty excel. Binary diff nie wchodziło w grę. Więc wdrożyliśmy nasze własne proste narzędzie wiersza poleceń. Sprawdź projekt ExcelCompare . W rzeczywistości pozwala nam to całkiem ładnie zautomatyzować nasze testy. Poprawki / prośby o Funkcje bardzo mile widziane!

 99
Author: na_ka_na,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-16 01:28:34

Szybko i łatwo bez zewnętrznych narzędzi, działa dobrze, o ile dwa arkusze, które porównujesz, są podobne:

  • Utwórz trzeci arkusz kalkulacyjny
  • Typ =if(Sheet1!A1 <> Sheet2!A1, "X", "") w lewej górnej komórce (lub równoważnym: kliknij rzeczywiste komórki, aby automatycznie wstawić odwołania do Formuły)
  • Ctrl+C (Kopiuj), Ctrl+a (Zaznacz wszystko), Ctrl + V (Wklej), aby wypełnić arkusz.

Jeśli arkusze są podobne, ten arkusz kalkulacyjny będzie być puste z wyjątkiem kilku komórek z X w nich, podkreślając różnice. Rozpakuj do 40%, aby szybko zobaczyć, co jest inne.

 107
Author: Laurent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 13:51:04

Robiłem wiele porównań skoroszytów Excela w przeszłości. Moja technika działa bardzo dobrze w przypadku skoroszytów z wieloma arkuszami roboczymi, ale porównuje tylko zawartość komórek, a nie formatowanie komórek, makra itp. Jest też trochę kodowania, ale warto, jeśli trzeba wielokrotnie porównywać wiele dużych plików. Oto jak to działa:

A) Napisz prosty program zrzutu, który przechodzi przez wszystkie arkusze robocze i zapisuje wszystkie dane do plików oddzielonych kartami. Utwórz jeden plik na arkusz (użyj nazwa arkusza roboczego jako nazwa pliku, np. " MyWorksheet.tsv") i utwórz nowy folder dla tych plików za każdym razem, gdy uruchomisz program. Nazwij folder po nazwie pliku excel i Dodaj znacznik czasu, np. "20080922-065412-MyExcelFile". Zrobiłem to w Javie używając biblioteki o nazwie JExcelAPI . To naprawdę proste.

B) Dodaj rozszerzenie powłoki systemu Windows, aby uruchomić nowy program Java z kroku A po kliknięciu prawym przyciskiem myszy na pliku Excel. To sprawia, że bardzo łatwo uruchomić ten program. Musisz Google Jak to zrobić, ale to tak proste jak napisanie *.plik reg.

C) Get BeyondCompare . Ma bardzo fajną funkcję porównywania rozdzielonych danych, pokazując je w ładnej tabeli, zobacz zrzut ekranu .

D) Teraz możesz łatwo porównać pliki Excela. Kliknij prawym przyciskiem myszy plik Excel 1 i uruchom program zrzutu. Utworzy folder z jednym plikiem na arkusz roboczy. Kliknij prawym przyciskiem myszy plik Excel 2 i uruchom program zrzutu. Utworzy drugi folder z jednym plikiem na arkusz. Teraz użyj BeyondCompare (BC), aby porównać foldery. Każdy plik reprezentuje arkusz roboczy, więc jeśli istnieją różnice w arkuszu BC pokaże to i możesz wywiercić i zrobić porównanie plików. BC pokaże porównanie w ładnym układzie tabeli, a Ty możesz ukryć wiersze i kolumny, które cię nie interesują.

 12
Author: thvo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 13:25:32

Możesz wypróbować to darmowe narzędzie online - www.cloudyexcel.com/compare-excel/

Daje dobre wyniki wizualne online, w zakresie wierszy dodawanych, usuwanych, zmienianych itp.

Tutaj wpisz opis obrazka

Plus nie musisz niczego instalować.

 11
Author: Shashank Singla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-18 13:32:09

Znalazłem Xdocdiff WinMerge Plugin . Jest to wtyczka dla WinMerge (zarówno OpenSource jak i Freeware , nie musisz pisać VBA ani zapisywać Excela do csv lub xml). To działa tylko dla celd zawiera.

Ten plugin obsługuje również:

  • .RTF Rich Text
  • .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 Open Document
  • .wj2/wj3/wk3/wk4 / 123 Lotus 123
  • .wri Windows3. 1 Write
  • .pdf Adobe PDF
  • .mht Web Archive
  • .eml eksportowane pliki z OutlookExpress

Regard, Andres

 9
Author: Andres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-20 16:22:20

Hmmm. Z menu Excel wybierz Okno - > Porównaj obok siebie?

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 23:01:39

Czy używasz TortoiseSVN do wykonywania zmian i aktualizacji w subversion? Posiada narzędzie diff, jednak porównywanie plików Excel nadal nie jest przyjazne dla użytkownika. W moim środowisku (Win XP, Office 2007) otwiera dwa pliki Excela do porównywania obok siebie.

Kliknij prawym przyciskiem myszy dokument > Tortoise SVN > Pokaż dziennik > wybierz przegląd > kliknij prawym przyciskiem myszy na "Porównaj z roboczą kopią".

 5
Author: Casper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 13:05:00

Wiem, że kilka odpowiedzi sugerowało wyeksportowanie pliku do csv lub innego formatu tekstowego, a następnie porównanie ich. Nie widziałem tego konkretnie, ale Beyond Compare 3 ma wiele dodatkowych formatów plików, które obsługuje. Zobacz Dodatkowe Formaty Plików . Za pomocą jednego z formatów plików Microsoft Excel można łatwo porównać dwa pliki Excel bez przechodzenia przez opcję Eksportuj do innego formatu.

 3
Author: mattsmith321,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 13:07:37

Altova DiffDog

Użyj trybu różnic XML diff diffdog i widoku siatki, aby przejrzeć różnice w łatwym do odczytania formacie tabelarycznym. Różnicowanie tekstu jest znacznie trudniejsze dla arkuszy kalkulacyjnych o dowolnej złożoności. Dzięki temu narzędziu co najmniej dwie metody są wykonalne w różnych okolicznościach.

  1. Zapisz Jako .xml

    Aby wykryć różnice w prostym, jednym arkuszu kalkulacyjnym, Zapisz arkusze kalkulacyjne Excel do porównania jako arkusz kalkulacyjny XML 2003 z .xml przedłużenie.

  2. Zapisz Jako .xlsx

    Aby wykryć różnice większości arkuszy kalkulacyjnych w modularnym modelu dokumentu, Zapisz arkusze kalkulacyjne Excel do porównania jako skoroszyt programu Excel .formularz xlsx. Otwórz pliki do Diffa za pomocą diffdog. Informuje Cię, że plik jest archiwum ZIP i pyta, czy chcesz go otworzyć w celu porównania katalogów. Po wyrażeniu zgody na porównanie katalogów, stosunkowo prostą sprawą staje się dwukrotne kliknięcie logicznych części dokumentu w celu ich rozróżnienia (z trybem XML diff). Większość z nich .dokument xslx to dane sformatowane w formacie XML. Widok siatki jest niezwykle przydatny. Trywialne jest różnicowanie poszczególnych arkuszy, aby skupić analizę na obszarach, o których wiadomo, że się zmieniły.

Skłonność Excela do poprawiania niektórych nazw atrybutów przy każdym zapisie jest irytująca, ale możliwości diffdoga w XML obejmują możliwość filtrowania pewnych rodzajów różnic. Na przykład arkusze kalkulacyjne Excel w formie XML zawierają row i c elementy, które mają atrybuty (styl) s, które zmieniają Nazwę przy każdym zapisie. Ustawienie filtra c:s znacznie ułatwia Przeglądanie tylko zmian zawartości.

Diffdog ma wiele możliwości różnicowania. Wymieniłem tryby różnicowania XML tylko dlatego, że nie użyłem innego narzędzia, które bardziej mi się podobało, jeśli chodzi o różnicowanie dokumentów Excel.

 2
Author: kbulgrien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-07 16:47:35

Nowsze wersje pakietu MS Office są dostarczane z Spreadsheet Compare, który wykonuje dość ładny diff w GUI. Wykrywa większość rodzajów zmian.

 2
Author: Gremlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 11:01:45

Istnieje Biblioteka daff (skrót od data diff), która pomaga w porównywaniu tabel, tworzeniu podsumowania ich różnic i używaniu takiego podsumowania jako pliku łat.

Jest napisany w Haxe, więc może być skompilowany w głównych językach.

Zrobiłem Excel narzędzie Diff w Javascript z pomocą tej biblioteki. Działa dobrze z liczbami i małymi ciągami, ale wyjście nie jest idealne dla długich ciągów (np. długie zdanie z drobną zmianą znaków).

 2
Author: shubhu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-09 18:53:05

Użyłbym formatu SYLK, jeśli wykonywanie diffów jest ważne. Jest to format tekstowy, który powinien sprawić, że porównania będą łatwiejsze i bardziej kompaktowe niż format binarny. Jest kompatybilny z Excel, Gnumeric i OpenOffice.org jak również, więc wszystkie trzy narzędzia powinny być w stanie dobrze współpracować. SYLK Wikipedia Article

 1
Author: Adam Hawkes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 13:05:02

Znalazłem makro OpenOffice tutaj które wywoła funkcję OpenOffice compare documents na dwóch plikach. Niestety, porównanie arkusza kalkulacyjnego openoffice wydaje się trochę łuszczące; właśnie miałem przycisk "Odrzuć wszystko" wstawić zbędną kolumnę w moim dokumencie.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-13 21:54:21

Xdocdiff plugin dla SVN

 1
Author: graveDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-17 04:00:02

Jeśli używasz Javy, możesz spróbować simple-excel .

Będzie różnicować arkusze kalkulacyjne za pomocą Matcherów Hamcrest i wyświetli coś takiego.

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)

Powinienem się zakwalifikować, że napisaliśmy to narzędzie (jak zaznaczona odpowiedź przewróciła swoje własne).

 1
Author: Toby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-11 07:24:11

Jeśli masz TortoiseSVN, możesz CTRL kliknąć dwa pliki, aby wybrać je w Eksploratorze Windows, a następnie kliknąć prawym przyciskiem myszy, TortoiseSVN- > Diff.

Działa to szczególnie dobrze, jeśli szukasz małej zmiany w dużym zestawie danych.

 1
Author: Chris B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 09:30:32

Mam taki problem jak ty, więc postanowiłem napisać małe narzędzie, które mi pomoże. Proszę sprawdzić ExcelDiff_Tools . Zawiera kilka kluczowych punktów:

  • Obsługa xls, xlsx, xlsm.
  • z komórką formula_1 Porównuje zarówno formułę, jak i wartość.
  • staram się, aby interfejs użytkownika wyglądał jak standardowa przeglądarka tekstu diff ze statusem: modified, deleted, added, unchanted. Proszę spojrzeć z obrazem poniżej na przykład: Tutaj wpisz opis obrazka
 1
Author: kokichi88,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-13 01:40:47

Diff Doc może być tym, czego szukasz.

    WordPerfect-program do obsługi plików tekstowych, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect, WordPerfect i WordPerfect.]}
  • Wybierz dowolną część dowolnego dokumentu (pliku) i porównaj ją z dowolną częścią tego samego lub innego dokumentu (pliku).
 0
Author: ConroyP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 12:59:29

Nie znam żadnych narzędzi, ale przychodzą mi na myśl dwa rozwiązania roll-your-own, oba wymagają Excela:

  1. Możesz napisać kod VBA, który przechodzi przez każdy arkusz, wiersz, kolumnę I komórkę dwóch skoroszytów, raportując różnice.

  2. Jeśli używasz programu Excel 2007, Możesz zapisać skoroszyty jako Open-XML (*.XLSX) format, wyodrębnij XML i diff, że. Plik Open-XML jest w zasadzie tylkoplik zip z .pliki xml i manifesty.

Skończysz z dużą ilością " hałasu "w obu przypadkach, jeśli arkusze kalkulacyjne nie są strukturalnie" blisko " na początek.

 0
Author: lesscode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 13:02:04

Konwertuj do cvs, następnie prześlij do systemu kontroli wersji, a następnie diff za pomocą zaawansowanego narzędzia do różnicowania wersji. Kiedy używałem perforce miał świetne narzędzie diff, ale zapomniałem nazwy.

 0
Author: patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 23:23:55

Jestem współautorem wolnego, open-source ' owego rozszerzenia Git:

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

Sprawia, że Git działa z dowolnym formatem skoroszytu Excela bez żadnych obejść.

 0
Author: Bjoern Stiel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 08:13:56