¿Cómo creo un diff legible de dos hojas de cálculo usando git diff?

Tenemos muchas hojas de cálculo (xls) en nuestro repository de código fuente. Estos generalmente se editan con gnumeric u openoffice.org, y se utilizan principalmente para llenar bases de datos para testings unitarias con dbUnit . No hay forms fáciles de hacer diffs en files xls que yo sepa, y esto hace que la fusión sea extremadamente tediosa y propensa a errores.

Intenté convertir las hojas de cálculo en xml y hacer un diff regular, pero realmente parece que debería ser el último recurso.

Me gustaría realizar la diferencia (y la fusión) con git como hago con los files de text. ¿Cómo haría esto, por ejemplo, al emitir git diff ?

Enfrentamos exactamente el mismo problema en nuestra empresa. Nuestras testings arrojan libros de trabajo de Excel. La diferencia binaria no era una opción. Así que lanzamos nuestra propia herramienta de línea de command simple. Vea el proyecto ExcelCompare . De hecho, esto nos permite automatizar nuestras testings bastante bien. Los parches / requestes de funciones son bienvenidos!

Rápido y fácil, sin herramientas externas, funciona bien siempre que las dos hojas que está comparando sean similares:

  • Crea una tercera spreadsheet
  • Escriba =if(Sheet1!A1 <> Sheet2!A1, "X", "") en la celda superior izquierda (o equivalente: click las celdas reales para que automáticamente se inserten las references en la fórmula)
  • Ctrl + C (copyr), Ctrl + A (seleccionar todo), Ctrl + V (pegar) para llenar la hoja.

Si las hojas son similares, esta spreadsheet estará vacía a exception de algunas celdas con X en ellas, destacando las diferencias. Unzoom al 40% para ver rápidamente qué es diferente.

He comparado un montón de libros de trabajo de Excel en el pasado. Mi técnica funciona muy bien para libros de trabajo con muchas hojas de cálculo, pero solo compara el contenido de las celdas, no el formatting de celdas, macros, etc. También hay encoding, pero vale la pena si tiene que comparar una gran cantidad de files grandes repetidamente. Así es como funciona:

A) Escriba un progtwig de volcado simple que recorre todas las hojas de trabajo y guarda todos los datos en files separados por tabuladores. Cree un file por hoja de trabajo (utilice el nombre de la hoja de trabajo como nombre de file, por ejemplo, "MyWorksheet.tsv") y cree una nueva carpeta para estos files cada vez que ejecute el progtwig. Asigne un nombre a la carpeta después del nombre de file excel y añada una timestamp, por ejemplo, "20080922-065412-MyExcelFile". Hice esto en Java usando una biblioteca llamada JExcelAPI . Es realmente bastante fácil.

B) Agregue una extensión de shell de Windows para ejecutar su nuevo progtwig Java desde el paso A haciendo clic derecho en un file de Excel. Esto hace que sea muy fácil ejecutar este progtwig. Necesitas Google para hacer esto, pero es tan fácil como escribir un file * .reg.

C) Obtener BeyondCompare . Tiene una característica muy buena para comparar datos delimitados mostrándolos en una buena tabla, ver captura de pantalla .

D) Ahora está listo para comparar files de Excel con facilidad. Haga clic derecho en el file de Excel 1 y ejecute su progtwig de volcado. Creará una carpeta con un file por hoja de trabajo. Haga clic derecho en el file de Excel 2 y ejecute su progtwig de volcado. Creará una segunda carpeta con un file por hoja de trabajo. Ahora usa BeyondCompare (BC) para comparar las carpetas. Cada file representa una hoja de trabajo, por lo tanto, si hay diferencias en una hoja de trabajo, BC lo mostrará y podrá profundizar y hacer una comparación de files. BC mostrará la comparación en un buen layout de tabla, y puede ocultar filas y columnas que no le interesan.

He encontrado xdocdiff WinMerge Plugin . Es un complemento para WinMerge (tanto OpenSource como Freeware , no es necesario escribir un VBA ni save un Excel en csv o xml). Funciona solo para el contenido del contenedor.

Este complemento también admite:

  • .rtf Texto enriquecido
  • .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 Documento abierto
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • .wri Windows3.1 Write
  • .pdf Adobe PDF
  • .mht Archivo web
  • .eml Archivos exportados desde OutlookExpress

Mira, Andrés

Puede probar esta herramienta gratuita en línea: http://www.cloudyexcel.com/compare-excel/

Proporciona un buen resultado visual en línea, en términos de filas agregadas, eliminadas, cambiadas, etc.

enter image description here

Además, no tienes que instalar nada.

Hmmm. En el menu de Excel, elija Ventana -> ¿Comparar lado a lado?

¿Usas TortoiseSVN para hacer tus commits y actualizaciones en subversión? Tiene una herramienta diff, sin embargo, comparar files de Excel todavía no es realmente fácil de usar. En mi entorno (Win XP, Office 2007), abre dos files de Excel para la comparación de lado a lado.

Haga clic derecho en el documento> Tortoise SVN> Mostrar logging> seleccionar revisión> clic derecho para "Comparar con copy de trabajo".

Sé que varias respuestas sugirieron exportar el file a csv u otro formatting de text y luego compararlo. No lo he visto mencionar específicamente, pero Beyond Compare 3 tiene una cantidad de formattings de file adicionales que admite. Ver formattings de file adicionales . Con uno de los formattings de file de Microsoft Excel puede comparar fácilmente dos files de Excel sin tener que pasar por la opción de exportar a otro formatting.

Utilice Altova DiffDog

Utilice el modo diff de XML de diffdog y la vista de cuadrícula para revisar las diferencias en un formatting tabular fácil de leer. El text que difiere es MUCHO MÁS DIFÍCIL para hojas de cálculo de cualquier complejidad. Con esta herramienta, al less dos methods son viables bajo diversas circunstancias.

  1. Guardar como .xml

    Para detectar las diferencias de una spreadsheet simple de una hoja, guarde las hojas de cálculo de Excel para compararlas como hojas de cálculo XML 2003 con una extensión .xml.

  2. Guardar como .xlsx

    Para detectar las diferencias de la mayoría de las hojas de cálculo en un model de documento modular, guarde las hojas de cálculo de Excel para compararlas como un Libro de Excel en formatting .xlsx. Abra los files a diff con diffdog. Le informa que el file es un file ZIP, y le pregunta si desea abrirlo para la comparación de directorys. Al aceptar la comparación de directorys, se convierte en una cuestión relativamente simple hacer doble clic en las partes lógicas del documento para diferenciarlas (con el modo XML diff). La mayoría de las partes del documento .xslx son datos con formatting XML. La vista de cuadrícula es extremadamente útil. Es trivial diferenciar hojas individuales para enfocar el análisis en áreas que se sabe que han cambiado.

La propensión de Excel a modificar ciertos nombres de attributes con cada operación de guardado es molesta, pero las capacidades de diferenciación XML de diffdog incluyen la capacidad de filtrar ciertos types de diferencias. Por ejemplo, las hojas de cálculo de Excel en formatting XML contienen elementos de row y c que tienen attributes s (estilo) que cambian de nombre con cada operación de guardado. La configuration de un filter como c:s hace que sea mucho más fácil ver solo los cambios de contenido.

diffdog tiene mucha capacidad de diferenciación. He enumerado los modos de diferencia XML simplemente porque no he usado otra herramienta que me gustaba más cuando se trata de diferenciar documentos de Excel.

Usaría el formatting de file SYLK si realizar diffs es importante. Es un formatting basado en text, que debería facilitar las comparaciones y ser más compacto que un formatting binary. También es compatible con Excel, Gnumeric y OpenOffice.org, por lo que las tres herramientas deberían funcionar bien juntas. Artículo SYLK Wikipedia

Encontré aquí una macro de oficina abierta que invocará la function de documentos de comparación de Open Office en dos files. Desafortunadamente, la comparación de hojas de cálculo de OpenOffice parece un poco escamosa; Acabo de hacer que el button "Rechazar todo" inserte una columna superflua en mi documento.

Complemento xdocdiff para SVN

Si está utilizando Java, puede probar simple-excel .

Difundirá las hojas de cálculo usando Hamcrest Matchers y generará algo como esto.

 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) 

Debería calificar para que escribiéramos esa herramienta (como la respuesta marcada se hizo suya).

Si tiene TortoiseSVN, puede hacer clic con la tecla CTRL en los dos files para seleccionarlos en Windows Explorer y luego hacer clic con el button derecho, TortoiseSVN-> Diff.

Esto funciona particularmente bien si está buscando un pequeño cambio en un gran set de datos.

Las versiones más nuevas de MS Office vienen con Spreadsheet Compare , que realiza una diferencia bastante buena en una GUI. Detecta la mayoría de los types de cambios.

Diff Doc puede ser lo que estás buscando.

  • Compare documentos de MS Word (DOC, DOCX, etc.), Excel, PDF, text enriquecido (RTF), text, HTML, XML, PowerPoint o Wordperfect y conserve el formatting
  • Elija cualquier parte de cualquier documento (file) y compárelo con cualquier parte del mismo documento o file (file).

No conozco ninguna herramienta, pero me vienen a la mente dos soluciones propias, ambas requieren Excel:

  1. Podría escribir algún código de VBA que pase por cada Hoja de trabajo, Fila, Columna y Celda de los dos Libros de trabajo, informando las diferencias.

  2. Si usa Excel 2007, puede save los libros de trabajo como formatting Open-XML (* .xlsx), extraer el XML y modificarlo. El file Open-XML es esencialmente solo un file .zip de files y manifiestos .xml.

En cualquier caso, terminará con mucho "ruido" si sus hojas de cálculo no están estructuralmente "cerradas" para empezar.

Convierta a cvs luego cargue a un sistema de control de versiones y luego difúndelo con una herramienta de control de versiones avanzada. Cuando utilicé forzosamente tuve una gran herramienta de diferenciación, pero olvido su nombre.

Tengo el problema como tú, así que decido escribir una pequeña herramienta para ayudarme. Por favor, consulte ExcelDiff_Tools . Viene con varios puntos key:

  • Soporte xls, xlsx, xlsm.
  • Con celda de fórmula. Comparará tanto la fórmula como el valor.
  • Intento que la interfaz de usuario parezca un visor de text estándar con: estado modificado, eliminado, agregado, sin cambios. Por favor, eche un vistazo con la image a continuación, por ejemplo: enter image description here