首页 新闻 赞助 找找看

C#WinForm比较两个Excel内是否有相同数值

1
悬赏园豆:50 [已解决问题] 解决于 2017-04-27 10:31

是这样 我想用C#WinForm窗体来比较两个Excel内是否有相同的数值 我现在能正常取到Excel里面的数据并显示在dgv里面 而且我选择需要对比的列 比如我选择Excel1里面的123列和Excel2里面的456列对比 这样我就需要用1比4,2比5,3比6  我现在有一个集合 里面保存的是预对比列的数值集合(就是一个集合里保存多个集合 每一个集合是一列 保存着当前列的数据) 我想问一下怎么进行判断 是否相同数据存在 我现在能正常遍历Excel1第一行的第123列数值 可我应该怎么去和Excel2里面的第一行第456列数值对比呢 我把遍历第二个Excel的循环放在第一行的循环里面了 但是这样有问题 

我的想法是Excel1中的第一行第一个值去和Excel2中的第一行第一个值作比较 如果不对 那下面的2,3列值就没必要比较了 之后再用第一行第一个值去比较Excel2中第二行第一个值 如果一样 就用第一行第二个值比较Excel2中第二行第二个值 三列值全部一样则标记出来 比如背景色标记为红色之类的 然后在把一样的从两个数组里面剔除(剔除之后会导致程序越来越快 因为对比出一样的就剔除 下面如果再对比数据数据量就少了)之后再往下继续对比 但是我现在在循环里面对比这里卡住了 有些不知道怎么往下写 所以想请教一下大家 我该怎么去取Excel2的值并且遍历对比 如果不一样直接跳出 继续对比Excel2中第二行直至第N行的值?

            #region 下面开始循环比对数据 ColumnList为Excel保存列的集合
            for (int i = 0; i < ColumnList1.Count; i++)
            {
                for (int j = 0; j < ColumnList1[i].Count; j++)
                {
                    for (int a = 0; a < ColumnList1.Count; a++)
                    {
                        str1 = ColumnList1[a][j];//这里遍历
              //我想从下面开始遍历第二个Excel列 然后对比 但是我有些不会写了
                        #region 以下是遍历并比对第二个Excel数据的循环
                        for (int i2 = 0; i2 < ColumnList2.Count; i2++)
                        {
                            str2 = ColumnList1[i2][j];
                            for (int j2 = 0; j2 < ColumnList2[i2].Count; j2++)
                            {
                                //str2 = ColumnList1[i2][j2];
                                if (str1.Equals(str2))
                                {
                                    string str3 = "相同";
                                    break;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        #endregion
                    }
                }
            }
            #endregion       

 

高正兴的主页 高正兴 | 初学一级 | 园豆:157
提问于:2017-04-25 12:01
< >
分享
最佳答案
1

把两个excel每行的数据拼接成字符串(字符串开始加对应行号及分隔符)加到list中,然后对两个list做inner join,join条件取分隔符后的sbustring,最后即可拿到重复的行了。

收获园豆:30
Daniel Cai | 专家六级 |园豆:10424 | 2017-04-25 12:27
其他回答(3)
0

list数据有了,用两层foreach循环比较试试呗

收获园豆:10
姚刘乐 | 园豆:70 (初学一级) | 2017-04-25 15:31
0

换个思路,把数据导入到数据库,通过Sql 直接搞定

收获园豆:10
@@@一统@@@ | 园豆:1551 (小虾三级) | 2017-04-25 15:38
0

不害意思请问这个代码您这边还有吗

守夜-shouye | 园豆:202 (菜鸟二级) | 2023-02-08 17:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册