如何使用git diff创build两个电子表格的可读差异?

我们在源代码库中有很多电子表格(xls)。 这些通常是用gnumeric或openoffice.org编辑的,主要用来填充dbUnit进行unit testing的数据库。 没有简单的方法来对我所知道的xls文件进行差异化,这使得合并非常繁琐和容易出错。

我已经尝试将电子表格转换为xml并进行常规比较,但是真的觉得应该是最后一招。

我想用git来执行差异(和合并),就像我对文本文件做的那样。 我将如何做到这一点,例如,当发出git diff

我们在公司面对同样的问题。 我们的testing输出excel工作簿。 二进制差异不是一个选项。 所以我们推出了我们自己的简单的命令行工具。 查看ExcelCompare项目 。 事实上,这使我们能够很好地自动化我们的testing。 修补程序/function请求非常欢迎!

只要你比较的两张纸是相似的,不用外部工具就可以快速而简单地工作,

  • 创build第三个电子表格
  • types=if(Sheet1!A1 <> Sheet2!A1, "X", "")在左上angular的单元格中(或等价物:单击实际单元格以自动将引用插入到公式中)
  • Ctrl + C (复制), Ctrl + A (全选), Ctrl + V (粘贴)填充表单。

如果工作表类似,那么这个电子表格将是空的,除了在其中有X的几个单元格,突出显示差异。 不放大到40%,快速看到有什么不同。

过去我已经做了大量的Excel工作簿比较。 我的技术适用于有很多工作表的工作簿,但是它只是比较单元格内容,而不是单元格格式化,macros等等。还有一些编码涉及到了,但是如果你必须重复比较大量文件,这是非常值得的。 这是如何工作的:

A)编写一个简单的转储程序,遍历所有工作表,并将所有数据保存为制表符分隔的文件。 每个工作表创build一个文件(使用工作表名称作为文件名,例如“MyWorksheet.tsv”),每次运行程序时为这些文件创build一个新的文件夹。 在excel文件名后面命名文件夹并添加时间戳,例如“20080922-065412-MyExcelFile”。 我使用名为JExcelAPI的库在Java中执行了此操作 。 这真的很容易。

B)右键单击Excel文件时,添加Windowsshell扩展以从步骤A运行新的Java程序。 这使得运行这个程序非常容易。 你需要谷歌如何做到这一点,但是这和编写* .reg文件一样简单。

C) 超越比较 。 它有一个非常酷的function,通过在漂亮的表格中显示它来比较分隔的数据, 请参阅截图 。

D)现在您已经准备好轻松比较Excel文件。 右键单击Excel文件1并运行您的转储程序。 它将为每个工作表创build一个文件夹。 右键单击Excel文件2并运行您的转储程序。 它将为每个工作表创build一个文件的第二个文件夹。 现在使用BeyondCompare(BC)比较文件夹。 每个文件都代表一张工作表,所以如果工作表中有不同,BC会显示出来,你可以向下钻取并进行文件比较。 不列颠哥伦比亚省将在一个漂亮的表格布局中显示比较结果,你可以隐藏你不感兴趣的行和列。

我find了xdocdiff WinMerge插件 。 它是WinMerge的一个插件( OpenSourceFreeware ,你不需要写一个VBA,也不需要把excel保存到csv或者xml中)。 它只适用于celd的内容。

这个插件还支持:

  • .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打开文档
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • .wri Windows3.1写入
  • .pdf Adob​​e PDF
  • .mht Web档案
  • .eml从OutlookExpress导出的文件

方面,Andres

你可以试试这个免费的在线工具 – http://www.cloudyexcel.com/compare-excel/

它在线添加,删除,更改等方面提供了良好的视觉输出。

在这里输入图像说明

另外你不必安装任何东西。

嗯。 从Excel菜单中select窗口 – >并排比较?

你使用TortoiseSVN来做你的提交和颠覆更新吗? 它有一个diff工具,但是比较Excel文件仍然不是真正用户友好的。 在我的环境中(Win XP,Office 2007),它打开了两个excel文件并排比较。

右键单击文件> Tortoise SVN>显示日志>select修订>右键单击“与工作副本比较”。

我知道有几个回应build议将文件导出到csv或其他文本格式,然后比较它们。 我没有看到它特别提到,但Beyond Compare 3有一些它支持的附加文件格式。 请参阅其他文件格式 。 使用Microsoft Excel文件格式之一,您可以轻松地比较两个Excel文件,而无需通过导出到另一个格式选项。

使用Altova DiffDog

使用diffdog的XML差异模式和网格视图以易于阅读的表格格式查看差异。 对于任何复杂的电子表格来说,文本差异是非常困难的。 有了这个工具,在各种情况下至less有两种方法是可行的。

  1. 保存为.xml

    要检测简单的单张电子表格的差异,请将Excel电子表格保存为XML Spreadsheet 2003与.xml扩展名进行比较。

  2. 另存为.xlsx

    要检测模块化文档模型中大多数电子表格的差异,请将Excel电子表格保存为.xlsx格式的Excel工作簿。 打开文件diff diff与diff。 它会通知您该文件是一个ZIP压缩文件,并询问您是否要打开它以进行目录比较。 在同意目录比较后,双击文档的逻辑部分来比较简单的事情(使用XML差异模式)。 .xslx文档的大部分是XML格式的数据。 网格视图非常有用。 分散单张纸以将分析重点放在已知变化的区域上是微不足道的。

Excel对于每次保存调整某些属性名称的倾向是令人讨厌的,但diffdog的XML差异function包括过滤某些差异的能力。 例如,XML格式的Excel电子表格包含具有s属性(样式)的rowc元素,每次保存都会重命名。 设置像c:s这样的filter可以更容易地查看内容的变化。

diffdog具有很多diff'ingfunction。 我只列出了XML差异模式,因为在差分Excel文档时,我还没有使用过其他我喜欢的工具。

如果执行差异很重要,我会使用SYLK文件格式。 这是一种基于文本的格式,它应该使比较比二进制格式更容易和更紧凑。 它与Excel,Gnumeric和OpenOffice.org也兼容,所以这三个工具应该能够很好地协同工作。 SYLK维基百科文章

我在这里find了一个openofficemacros,它将在两个文件中调用openoffice的比较文档函数。 不幸的是,openoffice的电子表格比较看起来有点片面; 我刚刚在“拒绝全部”button中插入了一个多余的列在我的文档中。

SVN的xdocdiff插件

如果你使用Java,你可以尝试简单的excel 。

它会使用Hamcrest匹配器来分析电子表格,并输出这样的内容。

 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) 

我应该有资格说我们写了这个工具(就像被打勾的答案一样)。

如果你有TortoiseSVN,那么你可以CTRL点击这两个文件在Windows资源pipe理器中select它们,然后右键单击TortoiseSVN-> Diff。

如果你正在寻找一个大型数据集的小改动,这个效果特别好。

更新版本的MS Office附带了Spreadsheet Compare ,它在GUI中执行相当不错的差异。 它检测大多数变化。

差异文档可能是你要找的。

  • 比较MS Word(DOC,DOCX等),Excel,PDF,RTF(RTF),文本,HTML,XML,PowerPoint或Wordperfect的文档并保留格式
  • select任何文档(文件)的任何部分,并将其与相同或不同文档(文件)的任何部分进行比较。

我不知道有什么工具,但有两个自己的解决scheme,想到了,都需要Excel:

  1. 您可以编写一些VBA代码,逐步遍历两个工作簿的每个工作表,行,列和单元格,报告差异。

  2. 如果您使用Excel 2007,则可以将工作簿保存为Open-XML(* .xlsx)格式,提取XML并对其进行比较。 Open-XML文件基本上只是.xml文件和清单的.zip文件。

如果您的电子表格在结构上不是“接近”的,那么在这两种情况下都会产生很多“噪音”。

转换成cvs然后上传到版本控制系统,然后使用高级版本控制差异工具进行比较。 当我使用perforce它有一个伟大的差异工具,但我忘了它的名字。

我得到了像你这样的问题,所以我决定写一些小工具来帮助我。 请检查ExcelDiff_Tools 。 它有几个关键点:

  • 支持xls,xlsx,xlsm。
  • 用公式单元格。 它会比较公式和价值。
  • 我试图使UI看起来像标准的差异文本查看器:修改,删除,添加,不变的状态。 请看下面的图片,例如: 在这里输入图像说明