Manière la plus facile de comparer deux fichiers Excel en Java?
Je suis en train d'écrire un test Unitaire pour un peu de code qui produit un fichier Excel (qui est binaire). J'ai un autre fichier Excel qui contient ma sortie attendue. Quelle est la meilleure façon de comparer le fichier pour le fichier attendu?
Sûr que je pourrais écrire le code moi-même, mais je me demandais si il y a une méthode existante dans un tiers de confiance de la bibliothèque (par exemple, de Printemps ou Apache Commons) qui fait déjà cela.
OriginalL'auteur Andrew Swan | 2009-05-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez envisager d'utiliser mon projet simple-excel qui fournit un tas de Hamcrest les allumettes pour faire le travail.
Quand vous faites quelque chose comme ce qui suit,
Vous auriez du voir, par exemple,
De cette façon, vous pouvez exécuter à partir de votre automatted tests et obtenir une rétroaction significative alors que vous êtes en développement.
Vous pouvez en lire plus à ce sujet à cet article sur mon site
je ne sais pas pourquoi c'est important, de son un projet OSS...
Car en plus d'être bon, c'est une règle de ce site, voir stackoverflow.com/faq#promotion.
bien sûr, mais je dirais que ce n'est pas si beaucoup d'une règle à partir de la SORTE; il suggère que la communauté peut obtenir irrité avec vous. J'aurais pensé que cela pourrait se produire dans le cas de flagrant d'auto-promotion. Ma réponse est authentique et s'inscrit dans la java des stratégies de test, c'est à dire hamcrest, bien. C'est une bonne réponse à la question, qui a offert de l'OMI.
au lieu de l'affirmation d'erreur, puis-je obtenir simplement le résultat de la comparaison dans certains format facile à lire? Je veux que les différences d'alimentation à une autre fonction pour la poursuite du traitement.
OriginalL'auteur Toby
Voici ce que j'ai fait (avec le gros du travail accompli par DBUnit):
Ce compare les données dans les deux fichiers, pas de risque de faux négatifs de chaque pas pertinent de métadonnées qui peuvent être différentes. Espérons que cela aide quelqu'un.
La dernière DbUnit version 2.5 ne fonctionne pas avec .fichier xlsx, seulement avec .les fichiers xls. Avez-vous une idée de comment faire le travail pour ".xlsx fichiers"?
Aucune idée désolé, sauf si vous avez l'option de première exportation de la .fichiers xlsx .xls.
J'ai essayé, mais il ne permet pas d'identifier les différences entre les valeurs des cellules, est-ce normal?
non, il a travaillé pour moi, mais c'était il y a six ans! 🙂
OriginalL'auteur Andrew Swan
Une simple comparaison de fichiers peut être facilement fait en utilisant du calcul des sommes de contrôle (comme MD5) ou tout simplement la lecture de ces deux fichiers.
Cependant, comme les fichiers Excel contiennent des charges de métadonnées, les fichiers ne seront probablement jamais être identiques octet-par-octet, comme James Burgess souligné.
De sorte que vous aurez besoin d'un autre type de comparaison pour votre test.
Je le recommande en quelque sorte à générer un "canonique" du fichier Excel, c'est à dire la lecture du fichier et le convertir en un format plus simple (CSV ou quelque chose de similaire), qui ne conservera les renseignements que vous souhaitez vérifier. Ensuite, vous pouvez utiliser la "forme canonique" pour comparer avec le résultat escompté (également dans la forme canonique, bien sûr).
Apache POI pourrait être utile pour la lecture du fichier.
BTW: la Lecture d'un fichier entier pour vérifier son correctnes ne serait généralement pas considéré un test Unitaire. C'est un test d'intégration...
Merci de me mettre sur la bonne voie; voir mon DBUnit solution ci-dessous (ou au-dessus, en fonction des votes!)
Pour .fichiers xlsx: les sommes de contrôle MD5 sera certainement différent, mais les répertoires résultant de la décompression à la fois .xlsx fichiers doivent être identiques (ce qui serait un meilleur moyen d'obtenir la forme canonique)
Oui, il devrait, mais il n'est pas 🙂 (juste testé avec Excel 2016). Il y a encore des métadonnées qui peuvent changer. Par exemple, .xlsx fichiers contiennent l'auteur et l'heure de dernière modification, et ils contiennent de la cellule qui était actif lorsque le document a été modifié. Vous avez encore besoin d'une certaine forme canonique pour la comparaison...
J'ai essayé avec Excel 2016 trop... les répertoires étaient identiques en comparaison avec
diff -r
car il permet de comparer le contenu des fichiers de manière récursive et pas l'auteur et de l'époque. Tout dépend de ce que vous considérez comme identiques, pour moi, c'est parfait comme je le voulais pour comparer le contenu et ignorer les choses comme fichier de gain de tempsOriginalL'auteur sleske
J'avais besoin de faire quelque chose de similaire et était déjà à l'aide de la Apache POI bibliothèque dans mon projet de création de fichiers Excel. J'ai donc opté pour utiliser le ExcelExtractor interface à l'exportation des deux classeurs comme une chaîne de texte, et a affirmé que les chaînes sont égales. Il y a des implémentations pour les deux HSSF pour .xls ainsi que XSSF pour .xlsx.
De vidage à la chaîne:
ExcelExtractor a certaines options pour ce que tout doit être inclus dans la chaîne de vidage. Je l'ai trouvé pour les valeurs par défaut de l', y compris les noms de feuilles. En outre, il comprend le texte contenu dans les cellules.
OriginalL'auteur joshden
Vous pouvez utiliser javaxdelta à vérifier si les deux fichiers sont les mêmes. Il est disponible ici:
http://javaxdelta.sourceforge.net/
OriginalL'auteur Jon
La façon la plus simple est d'utiliser Tika.
Je l'utilise comme ceci:
OriginalL'auteur BuckBazooka
Viens de découvrir il y a quelque chose dans commons-io FileUtils. Merci pour les autres réponses.
OriginalL'auteur Andrew Swan
S'il vous plaît, jetez un oeil à le site pour comparer les fichiers binaires, http://www.velocityreviews.com/forums/t123770-re-java-code-for-determining-binary-file-equality.html
Tigre
OriginalL'auteur Tiger
Vous pouvez utiliser Au-Delà De Comparer 3 qui peut être démarré à partir de la ligne de commande et prend en charge différents moyens de comparer des fichiers Excel, y compris:
OriginalL'auteur Wernight
Peut-être... comparer condensés MD5 de chaque fichier? Je suis sûr qu'il ya beaucoup de façons de le faire. Vous pouvez simplement ouvrir les deux fichiers et de comparer chaque octet.
EDIT: James a dit combien le format XLS peut avoir des différences dans les métadonnées. Vous devriez peut-être utiliser la même interface que vous avez utilisé pour générer les fichiers xls pour les ouvrir et de comparer les valeurs de cellule en cellule?
OriginalL'auteur CookieOfFortune