我们的原始码储存库中有很多电子表格(xls)。它们通常使用 gnumeric 或 openoffice. org 进行编辑,主要用于填充数据库,以便使用 DbUnit进行单元测试。据我所知,对 xls 文件进行差异处理并没有简单的方法,这使得合并非常繁琐,而且容易出错。
我尝试过将电子表格转换为 xml 并执行常规的 diff 操作,但我真的觉得这应该是最后的手段。
我希望像处理文本文件一样使用 git执行差异(和合并)。我应该怎样做,例如在发出 git diff时?
git
git diff
Diff Doc 可能就是你要找的。
比较 MSWord (DOC,DOCX 等)、 Excel、 PDF、 RTF、 Text、 HTML、 XML、 PowerPoint 或 Wordperfect 的文档并保留格式 选择任何文档(文件)的任何部分,并将其与相同或不同文档(文件)的任何部分进行比较。
我不知道有什么工具,但我想到了两种自己动手的解决方案,它们都需要 Excel:
您可以编写一些 VBA 代码,逐步遍历两个工作簿的每个工作表、行、列和单元格,报告差异。
如果使用 Excel2007,则可以将工作簿另存为 Open-XML (* 。Xlsx)格式,提取 XML 并对其进行区分。Open-XML 文件本质上只是一个。的压缩文件。Xml 文件和清单。
无论哪种情况,如果您的电子表格在结构上一开始就不“接近”,那么您最终都会遇到很多“噪音”。
您是否使用 TortoiseSVN 在 subversion 中进行提交和更新?它有一个 diff 工具,但是比较 Excel 文件仍然不是真正的用户友好。在我的环境(WinXP,Office2007)中,它打开两个 Excel 文件并排比较。
右键单击文档 > Tortoise SVN > 显示日志 > 选择修订 > 右键单击“与工作副本进行比较”。
如果执行差异很重要,我会使用 SYLK 文件格式。它是一种基于文本的格式,它应该比二进制格式更容易和更紧凑。它还兼容 Excel、 Gnumeric 和 OpenOffice.org,所以这三个工具应该能够很好地协同工作。 SYLK 维基百科
没有外部工具,快速简单,只要你比较的两张纸相似,就可以很好地工作:
=if(Sheet1!A1 <> Sheet2!A1, "X", "")
如果表格是相似的,这个电子表格将是空的,除了几个单元格中的 X,突出显示了差异。放大到40% ,以便快速查看有什么不同。
我以前对 Excel 工作簿做过很多比较。我的技术适用于有许多工作表的工作簿,但它只比较单元格内容,而不比较单元格格式、宏等。此外,还涉及到一些编码,但是如果您必须反复比较大型文件,那么这是非常值得的。它是这样运作的:
A)编写一个简单的转储程序,逐步通过所有的工作表,并保存所有的数据到制表符分隔的文件。每个工作表创建一个文件(使用工作表名作为文件名,例如“ MyWorksheet.tsv”) ,并在每次运行程序时为这些文件创建一个新的文件夹。以 excel 文件名命名文件夹并添加时间戳,例如“20080922-065412-MyExcelFile”。我在 Java 中使用了一个名为 JExcelAPI的库。真的很简单。
B)在右键单击 Excel 文件时,添加一个 Windows shell 扩展,从步骤 A 运行新的 Java 程序。这使得运行这个程序非常容易。你需要谷歌如何做到这一点,但这是一样容易写一个 * 。注册文件。
C)使用 BeyondCompare。它有一个非常酷的功能来比较分隔数据显示在一个很好的表,看屏幕截图。
D)现在可以轻松地比较 Excel 文件了。右键单击 Excel 文件1并运行转储程序。它将创建一个文件夹,每个工作表包含一个文件。右键单击 Excel 文件2并运行转储程序。它将创建第二个文件夹,每个工作表包含一个文件。现在使用 BeyondCompare (BC)对文件夹进行比较。每个文件代表一个工作表,因此如果工作表中存在差异,BC 将显示这一点,您可以向下钻取并进行文件比较。BC 将以一种漂亮的表格布局显示比较,并且您可以隐藏您不感兴趣的行和列。
从 Excel 菜单中选择 Window-> Compare side by side?
我找到了一个 openoffice 宏 给你,它将在两个文件上调用 openoffice 的比较文档功能。不幸的是,openoffice 的电子表格比较似乎有点古怪; 我刚刚让“拒绝所有”按钮在我的文档中插入了一个多余的列。
我找到 WinMerge 插件了。它是 WinMerge 的一个插件(开放源码和 免费软件,不需要编写 VBA,也不需要将 Excel 保存到 csv 或 xml)。它只对电池的容器有效。
这个插件还支持:
注意,安德烈斯
转换到简历,然后上传到一个版本控制系统,然后差异与先进的版本控制差异工具。当我使用 perforce 的时候,它有一个非常不同的工具,但是我忘记了它的名字。
用于 SVN 的 xdocdiff 插件
我知道一些回复建议将文件导出为 csv 或其他文本格式,然后比较它们。我没有特别提到它,但是 Beyond Compare 3支持许多其他的文件格式。参见 附加文件格式。使用 MicrosoftExcel 文件格式之一,您可以很容易地比较两个 Excel 文件,而无需通过导出到另一种格式选项。
我们公司也面临着同样的问题。我们的测试输出 Excel 练习簿。二进制差分不是一个选项。因此,我们推出了自己的简单命令行工具。看看 ExcelCompare 项目。事实上,这允许我们很好地自动化我们的测试。非常欢迎补丁/功能请求!
如果你使用 Java,你可以试试 Simple-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)
我应该有资格说,我们编写的工具(就像打勾的答案滚动自己)。
使用 阿尔托娃区分狗
使用 defdog 的 XML diff 模式和 Grid View 以一种易于阅读的表格格式检查差异。对于任何复杂的电子表格来说,文本差异化都要困难得多。使用这个工具,至少有两种方法在不同的情况下是可行的。
另存为. xml
为了检测一个简单的工作表电子表格之间的差异,请保存 Excel 电子表格,以便将其作为 XMLSpreadsheet 2003与。Xml 扩展名。
另存为.xlsx
若要检测模块化文档模型中大多数电子表格的差异,请将 Excel 电子表格保存为。Xlsx 表格。打开这些文件,以便区别对待。它通知您该文件是一个 ZIP 归档文件,并询问您是否要打开它进行目录比较。在同意目录比较之后,双击文档的逻辑部分来区分它们(使用 XML diff 模式)就变成了一个相对简单的问题。大部分地区。Xslx 文档是 XML 格式的数据。网格视图非常有用。将分析集中在已知发生变化的领域,区分不同的工作表是微不足道的。
Excel 在每次保存时调整特定属性名称的倾向令人讨厌,但是 defdog 的 XML 差异化功能包括过滤特定类型差异的能力。例如,XML 形式的 Excel 电子表格包含 row和 c元素,这些元素具有 s属性(样式) ,每次保存时都会重命名。设置像 c:s这样的过滤器使得只查看内容更改变得更加容易。
row
c
s
c:s
迪夫狗有很多不同的能力。我之所以列出 XML diff 模式,仅仅是因为我还没有使用另一个我更喜欢的工具来区分 Excel 文档。
如果你有 TortoiseSVN,那么你可以点击这两个文件来选择它们的文件资源管理器,然后右键点击,TortoiseSVN-> Diff。
如果您正在寻找大型数据集中的小更改,那么这种方法尤其有效。
你可以试试这个免费的在线工具 -Www.cloudyexcel.com/compare-excel/
它提供了一个很好的视觉输出在线,在行添加,删除,更改等方面。
而且你不需要安装任何东西。
我和你一样有这个问题,所以我决定写一个小工具来帮助我。请检查 ExcelDiff _ Tools。它有几个关键点:
较新版本的 MS Office 附带了 电子表格比较,它在 GUI 中表现得相当不错。它检测大多数类型的变化。
有一个 达夫库(data diff 的缩写) ,它可以帮助比较表,生成差异的摘要,并将这种摘要用作补丁文件。
它是在 Haxe 写成的,因此可以用主要语言编译。
在这个库的帮助下,我用 Javascript 编写了一个 差分工具。它可以很好地处理数字和小字符串,但是对于长字符串(例如一个带有小字符变化的长句)输出并不理想。
我是一个免费开源 Git 扩展的合著者:
Https://github.com/zoomeranalytics/git-xltrail
它使 Git 可以使用任何 Excel 工作簿文件格式,而不需要任何变通方法。