web-dev-qa-db-fra.com

Comment créer un diff lisible de deux feuilles de calcul avec git diff?

Nous avons beaucoup de feuilles de calcul (xls) dans notre référentiel de code source. Celles-ci sont généralement éditées avec gnumeric ou openoffice.org, et sont principalement utilisées pour remplir des bases de données pour les tests unitaires avec dbUnit . À ma connaissance, il n’existe pas de solution de diffs sur les fichiers xls, ce qui rend la fusion extrêmement fastidieuse et source d’erreurs.

J'ai essayé de convertir les feuilles de calcul au format XML et de faire un diff régulier, mais il me semble que cela devrait être un dernier recours.

Je voudrais effectuer la diffing (et la fusion) avec git comme je le fais avec des fichiers texte. Comment ferais-je cela, par exemple lors de l'émission git diff?

163
neu242

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

103
na_ka_na

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 que les références soient automatiquement insérées dans la formule)
  • Ctrl+C (copie), 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 contenant X, soulignant les différences. Décompressez à 40% pour voir rapidement ce qui est différent.

109
Laurent

J'ai souvent comparé des classeurs Excel par le passé. Ma technique fonctionne très bien pour les classeurs contenant de nombreuses feuilles de calcul, mais elle compare uniquement le contenu des cellules, pas le formatage des cellules, les macros, etc. De plus, certains codages sont nécessaires, mais cela en vaut la peine si vous devez comparer plusieurs fichiers volumineux à plusieurs reprises. Voilà comment cela fonctionne:

A) Ecrivez un programme de vidage simple qui examine 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"), puis créez un nouveau dossier pour ces fichiers à chaque exécution du programme. Nommez le dossier après le nom de fichier Excel et ajoutez un horodatage, par exemple. "20080922-065412-MyExcelFile". Je l'ai fait dans Java en utilisant une bibliothèque appelée JExcelAPI . C'est vraiment très simple.

B) Ajoutez une extension Windows Shell pour exécuter votre nouveau programme Java à partir de l'étape A lorsque vous cliquez avec le bouton droit de la souris sur un fichier Excel. Cela facilite grandement l'exécution de ce programme. Vous devez indiquer comment Google faites cela, mais c’est aussi simple que d’écrire un fichier * .reg.

C) Obtenez BeyondCompare . Il dispose d'une fonctionnalité très intéressante pour comparer des données délimitées en les affichant dans un tableau de Nice, 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. Maintenant, utilisez BeyondCompare (BC) pour comparer les dossiers. Chaque fichier représente une feuille de calcul. Par conséquent, s’il existe des différences dans une feuille de calcul, BC le montrera et vous pourrez alors explorer et comparer les fichiers. La Colombie-Britannique affichera la comparaison dans une présentation de tableau agréable et vous pourrez masquer des lignes et des colonnes qui ne vous intéressent pas.

12
thvo

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

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

enter image description here

De plus, vous ne devez rien installer.

11
Shashank Singla

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

Ce plugin supporte aussi:

  • .rtf Texte enrichi
  • .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 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 Ouvrir le document
  • .wj2/wj3/wk3/wk4/123 Lotus 123
  • .wri Windows3.1 Write
  • .pdf Adobe PDF
  • Archives Web
  • .eml Fichiers exportés à partir de OutlookExpress

Regard, Andres

10
Andres

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

6
Luke

Utilisez-vous TortoiseSVN pour effectuer vos commits et mises à jour dans Subversion? Il a un outil de diff, mais comparer des fichiers Excel n’est toujours pas très convivial. Dans mon environnement (Win XP, Office 2007), il ouvre deux fichiers Excel pour une comparaison côte à côte.

Cliquez avec le bouton droit de la souris sur document> Tortoise SVN> Afficher le journal> sélectionnez une révision> cliquez avec le bouton droit de la souris sur "Comparer avec la copie de travail".

5
Casper

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

Il est écrit en haxe et peut donc être compilé dans les principaux langages.

J'ai fait 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 phrase longue avec un changement de caractère mineur).

3
shubhu

Je sais que plusieurs réponses ont suggéré d'exporter le fichier au format csv ou en un autre format de texte, puis de les comparer. Je ne l'ai pas vu spécifiquement mentionné, mais Beyond Compare 3 prend en charge un certain nombre de formats de fichiers supplémentaires. 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'option d'exportation vers un autre format.

3
mattsmith321

Les nouvelles versions de MS Office sont accompagnées de Spreadsheet Compare , qui effectue un diff assez agréable dans une interface graphique. Il détecte la plupart des types de changements.

3
Gremlin

Utilisez Altova DiffDog

Utilisez le mode diff XML et l'affichage en grille de diffdog pour examiner les différences dans un format de tableau facile à lire. Diffuser le texte est BEAUCOUP PLUS DUR pour les feuilles de calcul de toute complexité. Avec cet outil, au moins deux méthodes sont viables dans différentes circonstances.

  1. Enregistrer sous .xml

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

  2. Enregistrer sous .xlsx

    Pour détecter les différences entre la plupart des feuilles de calcul dans un modèle de document modulaire, enregistrez les feuilles de calcul Excel à comparer sous forme de classeur Excel au format .xlsx. Ouvrez les fichiers à diff avec diffdog. Il vous informe que le fichier est une archive Zip et vous demande si vous souhaitez l'ouvrir pour la comparaison de répertoires. Lorsque vous acceptez la comparaison d'annuaire, il devient relativement simple de cliquer deux fois sur des parties logiques du document pour les différencier (avec le mode diff XML). La plupart des parties du document .xslx sont des données au format XML. La vue en grille est extrêmement utile. Il est facile de comparer les feuilles individuelles afin de centrer l'analyse sur les zones connues pour avoir changé.

La propension d'Excel à modifier certains noms d'attributs à chaque sauvegarde est ennuyeuse, mais les fonctionnalités de diffding XML de diffdog incluent la possibilité de filtrer certains types de différences. Par exemple, les feuilles de calcul Excel au format XML contiennent les éléments row et c dotés d'attributs (style) s et pouvant être renommés à chaque enregistrement. Mettre en place un filtre comme c:s, il est beaucoup plus facile d'afficher uniquement les modifications de contenu.

diffdog a beaucoup de capacités différentes. J'ai énuméré les modes de diff XML simplement parce que je n'ai pas utilisé un autre outil qui me plaisait mieux pour différencier des documents Excel.

2
kbulgrien

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

Les feuilles de calcul diff utiliseront des correspondeurs Hamcrest et produiront quelque chose comme ceci.

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 dire que nous avons écrit cet outil (comme la réponse cochée a été lancée).

1
Toby

Je voudrais utiliser le format de fichier SYLK si effectuer des diffs est important. C'est un format texte 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 ensemble. Article Wikipedia SYLK

1
Adam Hawkes

J'ai le problème comme vous alors j'ai décidé d'écrire un petit outil pour m'aider. S'il vous plaît vérifier ExcelDiff_Tools . Il comporte plusieurs points clés:

  • Soutenez xls, xlsx, xlsm.
  • Avec cellule de formule. Il va comparer à 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é. S'il vous plaît jeter un oeil avec l'image ci-dessous par exemple: enter image description here
1
kokichi88

xdocdiff plugin pour SVN

1
graveDust

Si vous avez TortoiseSVN, alors vous pouvez CTRL Cliquez sur les deux fichiers pour les sélectionner dans l'Explorateur Windows, puis cliquez avec le bouton droit de la souris sur TortoiseSVN-> Diff.

Cela fonctionne particulièrement bien si vous recherchez une petite modification dans un grand ensemble de données.

1
Chris B

J'ai trouvé une macro openoffice ici qui invoquera la fonction de comparaison des documents d'openoffice sur deux fichiers. Malheureusement, la comparaison entre les feuilles de calcul d'openoffice semble un peu floue; Je viens juste de faire insérer par le bouton "Rejeter tout" une colonne superflue dans mon document.

1
_mike

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

  • Comparez les documents MS Word (DOC, DOCX, etc.), Excel, PDF, RTF, Texte, HTML, XML, PowerPoint ou Wordperfect et conservez le formatage.
  • Choisissez n'importe quelle partie d'un document (fichier) et comparez-la à une partie du même document ou d'un autre (fichier).
0
ConroyP

Je ne connais aucun outil, mais il y a deux solutions qui vous 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 code XML et le différencier. Le fichier Open-XML est essentiellement un fichier .Zip de fichiers .xml et de manifestes.

Dans les deux cas, vous vous retrouverez avec beaucoup de "bruit" si vos feuilles de calcul ne sont pas structurellement "proches" pour commencer.

0
lesscode

Je suis le 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 solution de rechange.

0
Bjoern Stiel

Convertir en cvs puis télécharger vers un système de contrôle de version, puis diff avec un outil de contrôle de version avancé. Quand j'ai utilisé, il avait forcément un excellent outil de diff, mais j'en oublie le nom.

0
astronought