浅谈Excel内容比较.docx

上传人:b****4 文档编号:4709542 上传时间:2023-05-07 格式:DOCX 页数:16 大小:659.75KB
下载 相关 举报
浅谈Excel内容比较.docx_第1页
第1页 / 共16页
浅谈Excel内容比较.docx_第2页
第2页 / 共16页
浅谈Excel内容比较.docx_第3页
第3页 / 共16页
浅谈Excel内容比较.docx_第4页
第4页 / 共16页
浅谈Excel内容比较.docx_第5页
第5页 / 共16页
浅谈Excel内容比较.docx_第6页
第6页 / 共16页
浅谈Excel内容比较.docx_第7页
第7页 / 共16页
浅谈Excel内容比较.docx_第8页
第8页 / 共16页
浅谈Excel内容比较.docx_第9页
第9页 / 共16页
浅谈Excel内容比较.docx_第10页
第10页 / 共16页
浅谈Excel内容比较.docx_第11页
第11页 / 共16页
浅谈Excel内容比较.docx_第12页
第12页 / 共16页
浅谈Excel内容比较.docx_第13页
第13页 / 共16页
浅谈Excel内容比较.docx_第14页
第14页 / 共16页
浅谈Excel内容比较.docx_第15页
第15页 / 共16页
浅谈Excel内容比较.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

浅谈Excel内容比较.docx

《浅谈Excel内容比较.docx》由会员分享,可在线阅读,更多相关《浅谈Excel内容比较.docx(16页珍藏版)》请在冰点文库上搜索。

浅谈Excel内容比较.docx

浅谈Excel内容比较

浅谈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);

                        }

                    }

                }

            }

            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、使用OpenXMLSDK2.0

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

如果你还没有安装OpenXMLSDK2.0,可以在这里下载。

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

1)打开ProductivityTool:

 

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

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

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

 

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

 

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

 

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

这个界面与传统的比较软件中的界面非常相似,可以很容易的看出不同之处。

这种方法的缺点是比较结果不够直观,难以获取比较的汇总结果,当数据量很大时更是如此。

 

3、使用SpreadshCompare

SpreadshCompare是国外人写的一个VBA插件,开源免费,可以在sourceforge上下载,最新版本是1.15,支持Excel2003,Excel2007,目前还不支持Excel2010x64。

由于我使用的是Excel2010x64,故暂时在虚拟机中进行测试。

我使用的Hyper-V,安装了WindowsServer2003R2,Office2007。

1)下载完毕安装后,在Excel的【加载项】中可以看到一个天平的小图标:

 

2)先打开两个待比较的Excel:

1.xlsx、2.xlsx,然后分别选择两个待比较的Excel,点击【Next】:

 

3)选择逐单元格比较,保持大小写敏感,其他选项默认:

 

4)分别选择待比较的工作表,点击【Next】:

 

5)选择比较所有的区域,点击【Next】:

 

6)选择生成汇总表选项,保持默认即可:

 

7)设置工作表的顺序,然后点击【Compare】:

 

8)首先会给出一个简短的汇总信息:

 

9)点击【确定】后会生成两个工作簿,一个记录所有不同之处,另一个给出单元格对比分析:

 

 

10)同时对源文件也用颜色进行了标示,黄色表示不同:

 

经过大量数据测试,该插件性能很高,速度较快。

以后我会试着修改下这个插件的源代码,争取支持Excel2010x64。

其他类似的还有CompareSpreadsheetForExcel(商业软件)、ExcelCompare(商业软件)、SynkronizerforExcel(商业软件)等。

 

三、小结

本次我们畅谈了下Excel的比较问题,给出了三种解决方案,三种方案各有优劣,只是适用场合不同,请根据你的需求进行选择。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2