如何⽐较两个EXCEL⽂件的不同(各个EXCEL版本的⽅法)情景对话:
Marketing给你传了⼀个EXCEL,发话:这是最新版本,上次的作废,把新的release出去吧。
我,打开...纳尼?!没有mark,没有comments?我怎么知道你改了什么??每个都对过来我能爆粗⼝么!@&(……@)!#*&……*
相信很多⼈都有这种情况,这个时候你i就需要强⼤的助⼿来⽐较EXCEL,正题如下:
1). 如果你已经装了EXCEL2013,那么恭喜你,可以⽤上“Spreadsheet Compare 2013”这个微软⾃带的强⼤⼯具了。在Office2013 Tools 中你可以到这个⼯具,确实⾮常强⼤,直观的⽐较,还可以导出⽐对结果,简单易⽤,⼈性化,要的就是这个效果,相信⽤过后你也会爱不释⼿。如果你还在惆怅如何⽐较 EXCEL ⽂件,赶紧使⽤吧,它是迄今为⽌本⼈觉得最好的⽐较⼯具,没有之⼀。
2). 如果你不幸还在⽤⽼的EXCEL,当然可以⽐较的。下⾯转的⽂章也可助你⼀臂之⼒(有点费劲哦)。
说起⽂件内容⽐较,或许我们⾸先想到的是UltraCompare这类专业⽐较的软件,其功能⾮常强⼤,能够对基于⽂本的⽂件内容作出快速、准确的⽐较,有详细的差异报告,⾮常便于分析。其实,各种版本控制软件中也包含有或多或少的⽐较功能,如TFS、CVS、SVN等。但是如果待⽐较的⽂件不是基于⽂本
类型的,那就⽆能为⼒了。今天我就来谈⼀谈Excel的⽐较⽅法及其特点,也和⼤家共同探讨⼀下,如果你有更好的⽅法,欢迎分享。
⼀、Excel的⽂件架构
Excel的⽂件结构,⼀个Excel是⼀个⼯作簿,其中可以包含若⼲个⼯作表,正式由于这个架构,造成⽐较Excel中的内容⽐较困难,尤其当⼯作表中的数据量很⼤时,常规的⽐较软件更是⽆能为⼒。
⼆、三种⽐较⽅法
下⾯我分别⽤三种⽅法来⽐较两个Excel中的内容,⾸先准备两个测试Excel,为了简单起见,两个Excel都只包含⼀个⼯作表,其中填充了⼀些数字:
图1、1.xlsx
图2、2.xlsx
1、⾸先我⽤⽐较笨的⽅法,写⼀段程序,逐个⽐较单元格(假设两个Excel中包含的⼯作表的命名和个数完全相同):
private void fnExcelCompare(string v_strSourcePath, string v_strDestPath)
{
this.__int内容不同单元格个数=0;
this.__dic内容不同.Clear();
Excel.Application app =new Excel.Application();
app.DisplayAlerts =false;
Excel.Workbook srcBook = app.Workbooks.Open(v_strSourcePath);
Excel.Workbook destBook = app.Workbooks.Open(v_strDestPath);
FileStream log =new FileStream(System.Windows.Forms.Application.StartupPath +@"\Logs\ReportCheck.log"
, FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter writer =new StreamWriter(log);
string msg =string.Empty;
writer.WriteLine("*********************************************************************************\n");
foreach (Excel.Worksheet sheet in srcBook.Worksheets)
{
for (int i =1; i <= sheet.UsedRange.Rows.Count; i++)
{
for (int j =1; j <= sheet.UsedRange.Columns.Count; j++)
{
string src = sheet.Cells[i, j].Value2 ==null?string.Empty : sheet.Cells[i, j].Value2.ToString();
string dest = destBook.Worksheets[sheet.Name].Cells[i, j].Value2 ==null?string
.Empty : destBook.Worksheets[sheet.Name].Cells[i, j].Value2.ToString();
if (src != dest)
{
msg = DateTime.Now.ToString() +"------"+ sheet.Name +"【"+this.fnGetExcelAddress(i, j) +"】单元格中的内容不相同\n";
this.__int内容不同单元格个数++;
this.__dic内容不同.Add(this.__int内容不同单元格个数, msg);
writer.WriteLine(msg);writeline方法属于类
}
}
}
}
writer.WriteLine("*********************************************************************************\n");
srcBook.Save();
destBook.Save();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.Runtime.InteropServices.Marshal.ReleaseComObject(srcBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(destBook);
app =null;
srcBook =null;
destBook =null;
GC.Collect();
}
2、使⽤OpenXML SDK 2.0
前⾯的⽂章讲过OpenXML SDK及其相关⼯具的简单⽤法,其实还可以⽤它来⽐较Excel,当然,仅限于⽐较Excel 2007、Excel 2010。
如果你还没有安装OpenXML SDK 2.0,可以在下载。
下载完毕,⼀步步安装结束后,就可以使⽤了。
1)打开Productivity Tool:
2)对这个⼯具做⼀些简单配置:
可以选择显⽰⾏号、忽略命名空间、忽略声明:
选择待⽐较的Excel版本,我使⽤的Excel 2010,故选择第⼆个:
3)点击【Compare Files】,然后选择两个待⽐较的Excel⽂件,点击【OK】:
4)可以看到Excel被分拆成了⼀个个part,标记为绿⾊的表⽰内容中有不同:
5)选择⼀个标记为绿⾊的part,点击【View Par Diff】,可以查看具体的明细:
这个界⾯与传统的⽐较软件中的界⾯⾮常相似,可以很容易的看出不同之处。
这种⽅法的缺点是⽐较结果不够直观,难以获取⽐较的汇总结果,当数据量很⼤时更是如此。
3、使⽤SpreadshCompare
SpreadshCompare是国外⼈写的⼀个VBA插件,开源免费,可以在上下载,最新版本是1.15,⽀持Excel 2003,Excel 2007,⽬前还不⽀持Excel 2010 x64。由于我使⽤的是Excel 2010 x64,故暂时在虚拟机中进⾏测试。
我使⽤的Hyper-V,安装了Windows Server 2003 R2,Office 2007。
1)下载完毕安装后,在Excel的【加载项】中可以看到⼀个天平的⼩图标:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。