Comment créer un diff lisible de deux feuilles de calcul à l'aide de git diff?

168

Nous avons beaucoup de feuilles de calcul (xls) dans notre référentiel de code source. Ceux-ci sont généralement édités avec gnumeric ou openoffice.org, et sont principalement utilisés pour remplir les bases de données pour les tests unitaires avec dbUnit . Il n'y a pas de moyens faciles de faire des différences sur les fichiers xls que je connaisse, ce qui rend la fusion extrêmement fastidieuse et sujette aux erreurs.

J'ai essayé de convertir les feuilles de calcul en xml et de faire une comparaison régulière, mais j'ai vraiment l'impression que cela devrait être un dernier recours.

Je voudrais effectuer la différence (et la fusion) avec gitcomme je le fais avec des fichiers texte. Comment procéder, par exemple lors de l'émission git diff?

neu242
la source
4
Je pense que les balises unit-testing et dbunit sont incorrectement appliquées ici. La question concerne la comparaison de fichiers pour un format de fichier spécifique et n'a rien à voir avec les tests unitaires.
Hamish Smith
1
Pas de réponse (cela nécessite Excel et est un produit commercial) mais pour les personnes amenées ici par GooBinghoo - formulasoft.com/excel-compare.html fonctionne bien pour moi.
Bloke CAD
1
J'utilise ce script Python pour les différences d'Excel que nous enregistrons dans git. J'ai porté ce code GO (qui a été porté de Perl) sur Python: github.com/tokuhirom/git-xlsx-textconv#see-also Il vous permet d'utiliser git diffetgitk
nmz787
Un moyen simple de procéder serait d'exporter les données des deux feuilles de calcul au format CSV / texte et de faire un diff régulier (avec votre éditeur préféré ou vos fichiers de diff)
PPC

Réponses:

109

Nous avons fait face exactement au même problème dans notre co. Nos tests produisent des classeurs Excel. La différence binaire n'était pas une option. Nous avons donc déployé notre propre outil de ligne de commande simple. Découvrez le projet ExcelCompare . En fait, cela nous permet d'automatiser nos tests assez bien. Les demandes de correctifs / fonctionnalités sont les bienvenues!

na_ka_na
la source
2
@KimStacks yes fonctionne pour tous les xls, xlsx, ods. Et peut même comparer n'importe quel type avec l'autre, par exemple xls v / s xlsx.
na_ka_na
1
Excellent outil ... mais il dit "Échec de la différence: Échec de la lecture en tant que fichier Excel:" pour certains fichiers xls parfaitement valides. Pour tous ceux qui recherchent une alternative (beaucoup plus pauvre, de tous les autres points de vue): voir github.com/toobaz/xlrd_diff
Pietro Battiston
2
@PietroBattiston pls enregistre un ticket dans github et je vais le regarder.
na_ka_na
@na_ka_na Merci d'avoir créé cet outil!
jgpawletko
111

Rapide et facile sans outils externes, fonctionne bien tant que les deux feuilles que vous comparez sont similaires:

  • Créer une troisième feuille de calcul
  • Tapez =if(Sheet1!A1 <> Sheet2!A1, "X", "")dans la cellule en haut à gauche (ou équivalent: cliquez sur les cellules réelles pour avoir automatiquement les références insérées dans la formule)
  • Ctrl+C(copier), Ctrl+A(tout sélectionner), Ctrl+V(coller) pour remplir la feuille.

Si les feuilles sont similaires, cette feuille de calcul sera vide à l'exception de quelques cellules avec X en elles, mettant en évidence les différences. Dézoomez à 40% pour voir rapidement ce qui est différent.

Laurent
la source
6
Cela ne permet-il pas une comparaison cellule par cellule? Je veux dire que si le côté gauche a une ligne supplémentaire en haut, toutes les lignes restantes (et cellules) seront différentes. Si c'est comme ça, ce n'est pas très utile.
Hammad Khan
1
@Thecrocodilehunter: vous pouvez toujours supprimer cette ligne en haut et comparer le reste. Si les différences sont beaucoup plus complexes, vous avez bien sûr besoin d'un outil différent. Ceci est utile pour des comparaisons ponctuelles rapides, comme lorsque Excel dit que vous avez modifié la feuille de calcul et que vous craignez d'avoir accidentellement modifié un champ.
iconoclaste
1
J'ai aimé celui-ci. Au lieu de faire X, vous pouvez également faire "1" et avoir une SOMME comme premières lignes et colonnes. Ajoutez un som sur le tout premier champ et vous verrez rapidement combien de champs diffèrent.
Konerak
5
J'ai changé un peu la formule pour ne pas avoir à chercher quelles étaient les différences exactes. = IF (Sheet1! A1 <> Sheet2! A1, CONCATENATE ("Sheet 1 =", Sheet1! A1, "Sheet 2 =", Sheet2! A1), "")
Martyn
1
Vous pouvez simplement taper =Sheet1!A1=Sheet2!A1. Cela affichera TRUE ou FALSE. Vous pouvez ensuite effectuer un formatage conditionnel =countif(A1:B2, FALSE)ou quelque chose de similaire.
user2023861
12

J'ai beaucoup comparé des classeurs Excel dans le passé. Ma technique fonctionne très bien pour les classeurs avec de nombreuses feuilles de calcul, mais elle ne compare que le contenu des cellules, pas le formatage des cellules, les macros, etc. Voici comment ça fonctionne:

A) Écrivez un programme de vidage simple qui parcourt toutes les feuilles de calcul et enregistre toutes les données dans des fichiers séparés par des tabulations. Créez un fichier par feuille de calcul (utilisez le nom de la feuille de calcul comme nom de fichier, par exemple "MyWorksheet.tsv"), et créez un nouveau dossier pour ces fichiers à chaque fois que vous exécutez le programme. Nommez le dossier après le nom de fichier Excel et ajoutez un horodatage, par exemple "20080922-065412-MyExcelFile". J'ai fait cela en Java en utilisant une bibliothèque appelée JExcelAPI . C'est vraiment assez simple.

B) Ajoutez une extension de shell Windows pour exécuter votre nouveau programme Java à partir de l'étape A lorsque vous cliquez avec le bouton droit sur un fichier Excel. Cela rend très facile l'exécution de ce programme. Vous devez savoir comment faire sur Google, mais c'est aussi simple que d'écrire un fichier * .reg.

C) Obtenez BeyondCompare . Il a une fonctionnalité très intéressante pour comparer des données délimitées en les affichant dans un joli tableau, voir capture d'écran .

D) Vous êtes maintenant prêt à comparer facilement des fichiers Excel. Cliquez avec le bouton droit sur le fichier Excel 1 et exécutez votre programme de vidage. Il créera un dossier avec un fichier par feuille de calcul. Cliquez avec le bouton droit sur le fichier Excel 2 et exécutez votre programme de vidage. Il créera un deuxième dossier avec un fichier par feuille de calcul. Utilisez maintenant BeyondCompare (BC) pour comparer les dossiers. Chaque fichier représente une feuille de calcul, donc s'il y a des différences dans une feuille de calcul, BC l'affichera et vous pourrez explorer et faire une comparaison de fichiers. BC affichera la comparaison dans une belle mise en page de tableau et vous pourrez masquer les lignes et les colonnes qui ne vous intéressent pas.

thvo
la source
12

Vous pouvez essayer cet outil en ligne gratuit - www.cloudyexcel.com/compare-excel/

Il donne une bonne sortie visuelle en ligne, en termes de lignes ajoutées, supprimées, modifiées, etc.

entrez la description de l'image ici

De plus, vous n'avez rien à installer.

Shashank Singla
la source
Malheureusement, cela ne fonctionne que pour les fichiers <2 Mo. Quoi qu'il en soit, cela pourrait fonctionner pour quelqu'un d'autre.
MikeVelazco
10

J'ai trouvé xdocdiff WinMerge Plugin . C'est un plugin pour WinMerge (à la fois OpenSource et Freeware , vous n'avez pas besoin d'écrire un VBA ni d'enregistrer un Excel en csv ou xml). Cela fonctionne uniquement pour le contenu du celd.

Ce plugin prend également en charge:

  • Texte enrichi .rtf
  • .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 Ouvrir le document
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • .wri Windows3.1 Écriture
  • .pdf Adobe PDF
  • Archive Web .mht
  • .eml Fichiers exportés depuis OutlookExpress

Regard, Andres

Andrés
la source
1
Malheureusement, il ne permet pas d'enregistrer les modifications apportées aux fichiers décompressés, ce n'est donc pas utile pour la fusion. C'est gratuit cependant.
Sogger le
6

Hmmm. Dans le menu Excel, choisissez Fenêtre -> Comparer côte à côte?


la source
+1 fonctionne bien mais ne met pas en évidence les différences dans Office 2007. Je suppose que c'est le cas dans les anciennes versions. Toujours très bon pour la comparaison visuelle.
Hammad Khan
2
oui, il n'y a pas de mise en évidence, donc le seul avantage est le défilement synchrone.
Sogger
5

Utilisez-vous TortoiseSVN pour faire vos commits et mises à jour en subversion? Il dispose d'un outil de comparaison, mais la comparaison de fichiers Excel n'est toujours pas vraiment conviviale. Dans mon environnement (Win XP, Office 2007), il ouvre deux fichiers Excel pour une comparaison côte à côte.

Cliquez avec le bouton droit sur le document> Tortoise SVN> Afficher le journal> sélectionnez la révision> faites un clic droit pour "Comparer avec la copie de travail".

Casper
la source
4

Les nouvelles versions de MS Office sont livrées avec Spreadsheet Compare , qui effectue une comparaison assez intéressante dans une interface graphique. Il détecte la plupart des types de changements.

Diablotin
la source
Bien que cette réponse n'aidera probablement pas la situation d'OP avec une difffusion basée sur la ligne de commande , cet outil de comparaison de feuilles de calcul était parfait pour mes besoins (vérifier les différences entre la sortie d'automatisation OpenXML et la sortie d'automatisation Excel COM).
ErrCode
Remarque: j'ai essayé d'enquêter sur l'automatisation à l'aide de cet outil, mais cela n'a pas fonctionné pour moi (l'outil n'arrêtait pas de
planter
4

Il existe une bibliothèque daff (abréviation de data diff) qui aide à comparer les tables, à produire un résumé de leurs différences et à utiliser un tel résumé comme fichier de correctif.

Il est écrit en Haxe, donc il peut être compilé dans les principales langues.

J'ai créé un Excel Diff Tool en Javascript avec l'aide de cette bibliothèque. Cela fonctionne bien avec les nombres et les petites chaînes, mais la sortie n'est pas idéale pour les longues chaînes (par exemple une longue phrase avec un changement de caractère mineur).

Shubhu
la source
3

Je sais que plusieurs réponses ont suggéré d'exporter le fichier vers csv ou un autre format de texte, puis de les comparer. Je ne l'ai pas vu mentionné spécifiquement, mais Beyond Compare 3 a un certain nombre de formats de fichiers supplémentaires qu'il prend en charge. Voir Formats de fichiers supplémentaires . En utilisant l'un des formats de fichier Microsoft Excel, vous pouvez facilement comparer deux fichiers Excel sans passer par l'exportation vers une autre option de format.

mattsmith321
la source
2

J'utiliserais le format de fichier SYLK si l'exécution de diffs est importante. C'est un format basé sur du texte, ce qui devrait rendre les comparaisons plus faciles et plus compactes qu'un format binaire. Il est également compatible avec Excel, Gnumeric et OpenOffice.org, les trois outils devraient donc pouvoir fonctionner correctement ensemble. Article Wikipédia SYLK

Adam Hawkes
la source
C'est une excellente solution qui devrait être adoptée comme pratique courante dans les environnements qui utilisent fréquemment git avec des fichiers Excel (et d'autres fichiers). Il est définitivement "git" convivial (bien que les diffs ne soient pas lisibles par un humain) et ne nécessite aucun outil supplémentaire au-delà d'Excel "moderne" (c'est 2019 maintenant). Il est également «bidirectionnel», ce qui signifie que les autres utilisateurs peuvent enregistrer leurs feuilles de calcul Excel au format .slk (SYLK), puis les ouvrir avec toute la mise en forme appropriée, etc. dans Excel si nécessaire.
D. Woods
2

Utiliser Altova DiffDog

Utilisez le mode XML diff et la vue Grille de diffdog pour examiner les différences dans un format tabulaire facile à lire. La différence de texte est BEAUCOUP PLUS DIFFICILE pour les feuilles de calcul de toute complexité. Avec cet outil, au moins deux méthodes sont viables dans diverses circonstances.

  1. Enregistrer sous .xml

    Pour détecter les différences d'une feuille de calcul simple à une seule feuille, enregistrez les feuilles de calcul Excel à comparer en tant que feuille de calcul XML 2003 avec une extension .xml.

  2. Enregistrer sous .xlsx

    Pour détecter les différences de la plupart des feuilles de calcul dans un modèle de document modulaire, enregistrez les feuilles de calcul Excel à comparer en tant que classeur Excel au format .xlsx. Ouvrez les fichiers à comparer avec diffdog. Il vous informe que le fichier est une archive ZIP et vous demande si vous souhaitez l'ouvrir pour une comparaison de répertoires. En acceptant la comparaison de répertoires, il devient relativement simple de double-cliquer sur les parties logiques du document pour les différencier (avec le mode XML diff). La plupart des parties du document .xslx sont des données au format XML. La vue en grille est extrêmement utile. Il est simple de différencier des feuilles individuelles pour concentrer l'analyse sur des domaines connus pour avoir changé.

La propension d'Excel à modifier certains noms d'attributs à chaque sauvegarde est ennuyeuse, mais les capacités de diff'ing XML de diffdog incluent la possibilité de filtrer certains types de différences. Par exemple, les feuilles de calcul Excel sous forme XML contiennent rowet des céléments qui ont des sattributs (style) qui renommage avec chaque enregistrement. La configuration d'un filtre comme celui c:s-ci facilite la visualisation uniquement des modifications de contenu.

diffdog a beaucoup de capacités différentes. J'ai répertorié les modes de diff XML uniquement parce que je n'ai pas utilisé un autre outil que j'aimais mieux pour différencier les documents Excel.

kbulgrien
la source
1

J'ai trouvé ici une macro openoffice qui invoquera la fonction de comparaison de documents d'openoffice sur deux fichiers. Malheureusement, la comparaison de la feuille de calcul openoffice semble un peu floconneuse; Je viens d'avoir le bouton «Tout rejeter» pour insérer une colonne superflue dans mon document.


la source
1

plugin xdocdiff pour SVN

tombePoussière
la source
xdocdiff a l'air bien, mais il semble nécessiter TortioseSVN
neu242
xdocdiff a également un plugin WinMerge, tous deux utilisent xdoc2txt dans les coulisses
Sogger
1

Si vous utilisez Java, vous pouvez essayer simple-excel .

Il diffère les feuilles de calcul en utilisant des matchers Hamcrest et affiche quelque chose comme ça.

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)

Je devrais préciser que nous avons écrit cet outil (comme la réponse cochée a obtenu la leur).

Toby
la source
2
Merci d'avoir publié votre réponse! Veuillez lire attentivement la FAQ sur l'auto-promotion . Notez également qu'il est nécessaire que vous publiiez une clause de non-responsabilité chaque fois que vous créez un lien vers votre propre site / produit.
Andrew Barber
1

Si vous avez TortoiseSVN, vous pouvez CTRLcliquer sur les deux fichiers pour les sélectionner dans l'Explorateur Windows, puis cliquer avec le bouton droit sur TortoiseSVN-> Diff.

Cela fonctionne particulièrement bien si vous recherchez un petit changement dans un grand ensemble de données.

Chris B
la source
Cela ne fonctionne pas particulièrement bien, cependant, pour les fichiers binaires tels que le format XLS d'Excel.
Charles Wood
1
@CharlesWood - en fait , il fait un travail particulièrement bien. Tortoise utilise Excel lui-même pour fournir le diff et met en évidence les différentes cellules en rouge. Je ne l'ai pas essayé, mais je suis à peu près sûr qu'il fait également la même chose pour les fichiers Word .doc et .docx (en utilisant Word qui sert de visionneuse de différences).
Chris B
Whaaat! Le mien ne fait pas ça. Est-ce une nouvelle fonctionnalité ou avez-vous installé un plugin?
Charles Wood
:-D J'ai TortoiseSVN 1.7.12 et il le fait hors de la boîte. Le fichier d'aide indique qu'il prend en charge cela - tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html . Il utilise un script pour différencier les fichiers qui sur ma machine sont C: \ Program Files \ TortoiseSVN \ Diff-Scripts \ diff-xls.js. Est-il possible que vous ayez une stratégie de groupe sur votre ordinateur qui a désactivé les scripts?
Chris B
1

J'ai le problème comme toi alors je décide d'écrire un petit outil pour m'aider. Veuillez vérifier ExcelDiff_Tools . Il comporte plusieurs points clés:

  • Prend en charge xls, xlsx, xlsm.
  • Avec cellule de formule. Il comparera à la fois la formule et la valeur.
  • J'essaie de faire en sorte que l'interface utilisateur ressemble à une visionneuse de texte diff standard avec: statut modifié, supprimé, ajouté, inchangé. Veuillez regarder l'image ci-dessous par exemple: entrez la description de l'image ici
kokichi88
la source
1

Je suis co-auteur d'une extension Git gratuite et open source:

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

Cela permet à Git de fonctionner avec n'importe quel format de fichier de classeur Excel sans aucune solution de contournement.

Bjoern Stiel
la source
0

Diff Doc est peut-être ce que vous recherchez.

  • Comparez des documents MS Word (DOC, DOCX, etc.), Excel, PDF, Rich Text (RTF), Texte, HTML, XML, PowerPoint ou Wordperfect et conservez la mise en forme
  • Choisissez n'importe quelle partie de n'importe quel document (fichier) et comparez-la à n'importe quelle partie du même document ou d'un autre document (fichier).
ConroyP
la source
2
Diff Doc est une source fermée uniquement pour Windows, elle ne répond vraiment pas à mes besoins.
neu242
0

Je ne connais aucun outil, mais il y a deux solutions à rouler soi-même qui me viennent à l'esprit, toutes deux nécessitent Excel:

  1. Vous pouvez écrire du code VBA qui parcourt chaque feuille de calcul, ligne, colonne et cellule des deux classeurs, en signalant les différences.

  2. Si vous utilisez Excel 2007, vous pouvez enregistrer les classeurs au format Open-XML (* .xlsx), extraire le XML et le comparer. Le fichier Open-XML est essentiellement un fichier .zip de fichiers .xml et de manifestes.

Vous vous retrouverez avec beaucoup de «bruit» dans les deux cas si vos feuilles de calcul ne sont pas structurellement «proches» pour commencer.

lesscode
la source
À partir d'Excel 2002, vous pouvez également enregistrer au format «Feuille de calcul XML», ce qui est plus simple que de traiter des fichiers xlsx.
Sam Warwick
0

Convertissez en cvs puis téléchargez dans un système de contrôle de version puis différez avec un outil de comparaison de version avancé. Quand j'ai utilisé forcément, il y avait un excellent outil de comparaison, mais j'en oublie le nom.

patrick
la source