如何使用git diff创建两个电子表格的可读差异?
我们的源代码存储库中有很多电子表格(xls)。这些通常使用gnumeric或者openoffice.org编辑,并且通常用于填充数据库以使用dbUnit进行单元测试。据我所知,没有简单的方法可以对xls文件进行差异处理,这使得合并变得非常乏味且容易出错。
我曾尝试将电子表格转换为xml并进行常规的比较,但确实感觉应该是最后的选择。
我想像对文本文件一样对git
进行比较(和合并)。我将如何做,例如当发布git diff
时?
解决方案
Diff Doc可能就是我们想要的。
Compare documents of MS Word (DOC, DOCX etc), Excel, PDF, Rich Text (RTF), Text, HTML, XML, PowerPoint, or Wordperfect and retain formatting Choose any portion of any document (file) and compare it against any portion of the same or different document (file).
我不知道任何工具,但想到的是两种自助式解决方案,都需要使用Excel:
- 我们可以编写一些VBA代码,逐步遍历两个工作簿的每个工作表,行,列和单元格,报告差异。
- 如果使用Excel 2007,则可以将工作簿另存为Open-XML(* .xlsx)格式,提取XML并进行比较。 Open-XML文件本质上只是.xml文件和清单的.zip文件。
如果电子表格在结构上并非一开始就"关闭",那么在任何一种情况下,我们都将面临很多"噪音"。
我们是否使用TortoiseSVN在Subversion中进行提交和更新?它具有一个diff工具,但是比较Excel文件仍然不是真正的用户友好。在我的环境(Win XP,Office 2007)中,它打开了两个excel文件并排比较。
右键单击文档> Tortoise SVN>显示日志>选择修订版>右键单击"与工作副本比较"。
如果执行差异比较重要,我将使用SYLK文件格式。它是一种基于文本的格式,与二进制格式相比,它应该使比较更容易且更紧凑。它也与Excel,Gnumeric和OpenOffice.org兼容,因此所有这三个工具都应该能够很好地协同工作。
SYLK维基百科文章
只要我们比较的两张纸相似,那么无需外部工具即可轻松快捷地工作:
- 创建第三个电子表格
- 在左上方的单元格中输入
= if(Sheet1!A1 <> Sheet2!A1," X","")
(或者等效项:单击实际单元格以将引用自动插入公式中) - Ctrl + C(复制),Ctrl + A(全选),Ctrl + V(粘贴)填充工作表。
如果工作表相似,则该电子表格将为空,但其中包含几个带有X的单元格,以突出显示差异。放大至40%即可快速查看有什么不同。
过去,我已经做了很多Excel工作簿的比较。我的技术适用于具有许多工作表的工作簿,但它只比较单元格内容,而不比较单元格格式,宏等。此外,涉及一些编码,但是如果必须重复比较许多大文件,则非常值得。运作方式如下:
A)编写一个简单的转储程序,逐步浏览所有工作表并将所有数据保存到制表符分隔的文件中。每个工作表创建一个文件(使用工作表名称作为文件名,例如" MyWorksheet.tsv"),并在每次运行程序时为这些文件创建一个新文件夹。用excel文件名命名文件夹并添加时间戳,例如" 20080922-065412-MyExcelFile"。我使用称为JExcelAPI的库在Java中进行了此操作。这真的很容易。
B)添加一个Windows shell扩展,以在右键单击Excel文件时从步骤A运行新的Java程序。这使得运行该程序非常容易。我们需要向Google查询如何执行此操作,但这就像编写* .reg文件一样简单。
C)获得超越。它具有非常酷的功能,可以通过在漂亮的表格中显示分隔的数据来比较分隔的数据,请参见屏幕截图。
D)现在我们可以轻松比较Excel文件了。右键单击Excel文件1,然后运行转储程序。它将创建一个文件夹,每个工作表包含一个文件。右键单击Excel文件2,然后运行转储程序。它将创建第二个文件夹,每个工作表一个文件。现在使用BeyondCompare(BC)比较文件夹。每个文件都代表一个工作表,因此,如果工作表中存在差异,则BC会显示此文件,我们可以向下钻取并进行文件比较。 BC将以一个漂亮的表格布局显示比较,并且我们可以隐藏不感兴趣的行和列。
嗯从Excel菜单中选择"窗口"->"并排比较?"。
我在这里找到一个openoffice宏,它将在两个文件上调用openoffice的比较文档功能。不幸的是,openoffice的电子表格比较似乎有些不稳定。我只是使用"全部拒绝"按钮在文档中插入了多余的列。
我找到了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网站档案
- .eml从OutlookExpress导出的文件
问候,安德烈斯
转换为cvs,然后上传到版本控制系统,然后使用高级版本控制diff工具进行diff。当我使用perforce时,它具有出色的diff工具,但我忘记了它的名称。
SVN的xdocdiff插件
我知道有几个建议建议将文件导出为csv或者其他某种文本格式,然后进行比较。我还没有看到它专门提到的内容,但是"超越比较3"还支持许多其他文件格式。请参阅其他文件格式。使用一种Microsoft Excel文件格式,我们可以轻松比较两个Excel文件,而无需执行导出到另一种格式选项的操作。