浅谈Excel内容比较

  • 格式:doc
  • 大小:729.00 KB
  • 文档页数:16

tbw淘宝网 taob 防晒霜热卖排行榜10强 什么防晒霜效果好 曼秀雷敦防晒霜 防晒霜排行榜9强

浅谈Excel内容比较

说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速、准确的比较,有详细的差异报告,非常便于分析。其实,各种版本控制软件中也包含有或多或少的比较功能,如TFS、CVS、SVN等。但是如果待比较的文件不是基于文本类型的,那就无能为力了。今天我就来谈一谈Excel的比较方法及其特点,也和大家共同探讨一下,如果你有更好的方法,欢迎分享。

一、Excel的文件架构

Excel的文件结构,一个Excel是一个工作簿,其中可以包含若干个工作表,正式由于这个架构,造成比较Excel中的内容比较困难,尤其当工作表中的数据量很大时,常规的比较软件更是无能为力。

二、三种比较方法

下面我分别用三种方法来比较两个Excel中的内容,首先准备两个测试Excel,为了简单起见,两个Excel都只包含一个工作表,其中填充了一些数字:

图1、1.xlsx

tbw淘宝网 taob 防晒霜热卖排行榜10强 什么防晒霜效果好 曼秀雷敦防晒霜 防晒霜排行榜9强

图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;

tbw淘宝网 taob 防晒霜热卖排行榜10强 什么防晒霜效果好 曼秀雷敦防晒霜 防晒霜排行榜9强

writer.WriteLine("*********************************************************************************\n");

foreach (Excel.Worksheet sheet in srcBook.Worksheets)

{

for (int i = 1; i <= edRange.Rows.Count; i++)

{

for (int j = 1; j <= edRange.Columns.Count; j++)

{

string src = sheet.Cells[i, j].Value2 == null ? string.Empty : sheet.Cells[i, j].Value2.ToString();

string dest = destBook.Worksheets[].Cells[i, j].Value2 == null ? string.Empty : destBook.Worksheets[].Cells[i, j].Value2.ToString();

if (src != dest)

{

msg = DateTime.Now.ToString() + "------" + + " 【" + this.fnGetExcelAddress(i, j) + "】单元格中的内容不相同\n";

this.__int内容不同单元格个数++;

this.__dic内容不同.Add(this.__int内容不同单元格个数, msg);

writer.WriteLine(msg);

}

}

}

}

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();

}

tbw淘宝网 taob 防晒霜热卖排行榜10强 什么防晒霜效果好 曼秀雷敦防晒霜 防晒霜排行榜9强

2、使用OpenXML SDK 2.0

前面的文章讲过OpenXML SDK及其相关工具的简单用法,其实还可以用它来比较Excel,当然,仅限于比较Excel 2007、Excel 2010。

如果你还没有安装OpenXML SDK 2.0,可以在这里下载。

下载完毕,一步步安装结束后,就可以使用了。

1)打开Productivity Tool:

2)对这个工具做一些简单配置:

可以选择显示行号、忽略命名空间、忽略声明:

选择待比较的Excel版本,我使用的Excel 2010,故选择第二个:

tbw淘宝网 taob 防晒霜热卖排行榜10强 什么防晒霜效果好 曼秀雷敦防晒霜 防晒霜排行榜9强

3)点击【Compare Files】,然后选择两个待比较的Excel文件,点击【OK】:

4)可以看到Excel被分拆成了一个个part,标记为绿色的表示内容中有不同:

tbw淘宝网 taob 防晒霜热卖排行榜10强 什么防晒霜效果好 曼秀雷敦防晒霜 防晒霜排行榜9强

5)选择一个标记为绿色的part,点击【View Par Diff】,可以查看具体的明细: