如何使用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的一个插件( OpenSource和Freeware ,你不需要写一个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 Adobe PDF
- .mht Web档案
- .eml从OutlookExpress导出的文件
方面,Andres
嗯。 从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有两种方法是可行的。
-
保存为.xml
要检测简单的单张电子表格的差异,请将Excel电子表格保存为XML Spreadsheet 2003与.xml扩展名进行比较。
-
另存为.xlsx
要检测模块化文档模型中大多数电子表格的差异,请将Excel电子表格保存为.xlsx格式的Excel工作簿。 打开文件diff diff与diff。 它会通知您该文件是一个ZIP压缩文件,并询问您是否要打开它以进行目录比较。 在同意目录比较后,双击文档的逻辑部分来比较简单的事情(使用XML差异模式)。 .xslx文档的大部分是XML格式的数据。 网格视图非常有用。 分散单张纸以将分析重点放在已知变化的区域上是微不足道的。
Excel对于每次保存调整某些属性名称的倾向是令人讨厌的,但diffdog的XML差异function包括过滤某些差异的能力。 例如,XML格式的Excel电子表格包含具有s
属性(样式)的row
和c
元素,每次保存都会重命名。 设置像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:
-
您可以编写一些VBA代码,逐步遍历两个工作簿的每个工作表,行,列和单元格,报告差异。
-
如果您使用Excel 2007,则可以将工作簿保存为Open-XML(* .xlsx)格式,提取XML并对其进行比较。 Open-XML文件基本上只是.xml文件和清单的.zip文件。
如果您的电子表格在结构上不是“接近”的,那么在这两种情况下都会产生很多“噪音”。
转换成cvs然后上传到版本控制系统,然后使用高级版本控制差异工具进行比较。 当我使用perforce它有一个伟大的差异工具,但我忘了它的名字。
我得到了像你这样的问题,所以我决定写一些小工具来帮助我。 请检查ExcelDiff_Tools 。 它有几个关键点:
- 支持xls,xlsx,xlsm。
- 用公式单元格。 它会比较公式和价值。
- 我试图使UI看起来像标准的差异文本查看器:修改,删除,添加,不变的状态。 请看下面的图片,例如: