如何用C# 来比较EXCEL表中两列数据的差异?

crazyzyc 2015-02-12 09:40:43
EXCEL有A,B两列数据:
A 列 B列
1 11
2 2
3 33
4 4

如何用C#找出A列在B列中没有的数据,并显示在另一个EXCEL中,谢谢。
...全文
819 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 12 楼 crazyzyc 的回复:
我用的NPOI操作EXCEL,找相同的数据我会了,找出不同的数据该怎么写呢?

 StringBuilder sbr = new StringBuilder();
            using (FileStream fs = File.OpenRead(txtFile.Text))   //打开myxls.xls文件
            {
               XSSFWorkbook wk = new XSSFWorkbook(fs);   //把xls文件中的数据写入wk中
               
                    ISheet sheet = wk.GetSheetAt(1);   //读取当前表数据
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数
                    {
                        IRow rowA = sheet.GetRow(j);  //读取当前行数据
                        if (rowA != null)
                        {
                           
                           
                                ICell cellA = rowA.GetCell(0);  //当前表格
                             
                                if (cellA != null)
                                {
                                    for (int i = 0; i < sheet.LastRowNum; i++)
                                    {
                                        IRow rowB = sheet.GetRow(i);
                                        if (rowB != null)
                                        {
                                            ICell cellB = rowB.GetCell(1);
                                            if (cellA.ToString() == cellB.ToString())
                                            {
                                           
                                            sbr.Append("\r\n"); //读取行与行之间的提示界限
                        sbr.Append(cellA.ToString());   //获取表格中的数据并转换为字符串类型
                               }


                                            
                                        }
                                    }

                                        
                                }
                            
                        }
相同的数据会了?不同的数据不就会? 这个我无法理解,如果两个数据相同就是相等了, 两个数据不等那不就是不等了?
  • 打赏
  • 举报
回复
引用 11 楼 Z65443344 的回复:
你们请假不扣工资? 即使工作时间打DOTA,一样还是得上班 万一确实遇到点什么事情,也不至于找不到人
啊?红孩儿没有年假吗?请年情假嘛.
於黾 2015-02-12
  • 打赏
  • 举报
回复
读取excel之后先放到数据集里,不要直接在文件里操作
crazyzyc 2015-02-12
  • 打赏
  • 举报
回复
我用的NPOI操作EXCEL,找相同的数据我会了,找出不同的数据该怎么写呢?

 StringBuilder sbr = new StringBuilder();
            using (FileStream fs = File.OpenRead(txtFile.Text))   //打开myxls.xls文件
            {
               XSSFWorkbook wk = new XSSFWorkbook(fs);   //把xls文件中的数据写入wk中
               
                    ISheet sheet = wk.GetSheetAt(1);   //读取当前表数据
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数
                    {
                        IRow rowA = sheet.GetRow(j);  //读取当前行数据
                        if (rowA != null)
                        {
                           
                           
                                ICell cellA = rowA.GetCell(0);  //当前表格
                             
                                if (cellA != null)
                                {
                                    for (int i = 0; i < sheet.LastRowNum; i++)
                                    {
                                        IRow rowB = sheet.GetRow(i);
                                        if (rowB != null)
                                        {
                                            ICell cellB = rowB.GetCell(1);
                                            if (cellA.ToString() == cellB.ToString())
                                            {
                                           
                                            sbr.Append("\r\n"); //读取行与行之间的提示界限
                        sbr.Append(cellA.ToString());   //获取表格中的数据并转换为字符串类型
                               }


                                            
                                        }
                                    }

                                        
                                }
                            
                        }
於黾 2015-02-12
  • 打赏
  • 举报
回复
你们请假不扣工资? 即使工作时间打DOTA,一样还是得上班 万一确实遇到点什么事情,也不至于找不到人
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
[quote=引用 5 楼 nice_fish 的回复:] 红孩儿还不回家,还在论坛辛勤耕耘
没放假呢啊 你们放假这么早?[/quote] 没放假就请假了, 公司里面已经有人开始打Dota了- - , 这节奏好快速.
於黾 2015-02-12
  • 打赏
  • 举报
回复
苦逼程序员 临到过年,明明已经啥活都没有了,还要在这里靠着
於黾 2015-02-12
  • 打赏
  • 举报
回复
引用 5 楼 nice_fish 的回复:
红孩儿还不回家,还在论坛辛勤耕耘
没放假呢啊 你们放假这么早?
於黾 2015-02-12
  • 打赏
  • 举报
回复
假如两个string[]数组 string[] s1=new string[]{"1","2","3"}; string[] s2=new string[]{"3","2","1"}; 对比不过就是 for(int i=0;i<3;i++) { if(s1[i]==s2[i]) { //这不就找出来了,如果是List<string>也是一样的 } } DataTable你不会用,就先学习一下,它分行和列 不就是循环行,然后判断列1的值和列2的值是否一样就行了
crazyzyc 2015-02-12
  • 打赏
  • 举报
回复
引用 3 楼 nice_fish 的回复:
[quote=引用 2 楼 crazyzyc 的回复:] [quote=引用 1 楼 Z65443344 的回复:] 首先你必须把excel里的数据读出来 然后管你是放到一个DataTable里还是2个List<string>里, 最后也不过是循环比较一下,然后再把比较结果放到一个新的DataTable或List里,然后导出excel就行了 至于如何导入导出Excel 看这里
能详细点解释一下如何把不同的数据找出来吗?[/quote] 他回答的已经够详细了,读出数据-> 填充实体 ->对比实体->下步操作. 你觉得上面哪个步骤你解决不了?[/quote] 对比实体这一步,怎么把不同找出来?求解。
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
就是一个循环,判断而已嘛,怎么找出来? 不就是for() if 就找出来了 如果循环判断也不会,那跟这个问题其实没有关系 你需要恶补基础 循环,判断,赋值,是最最基础的3个语法
红孩儿还不回家,还在论坛辛勤耕耘
於黾 2015-02-12
  • 打赏
  • 举报
回复
就是一个循环,判断而已嘛,怎么找出来? 不就是for() if 就找出来了 如果循环判断也不会,那跟这个问题其实没有关系 你需要恶补基础 循环,判断,赋值,是最最基础的3个语法
  • 打赏
  • 举报
回复
引用 2 楼 crazyzyc 的回复:
[quote=引用 1 楼 Z65443344 的回复:] 首先你必须把excel里的数据读出来 然后管你是放到一个DataTable里还是2个List<string>里, 最后也不过是循环比较一下,然后再把比较结果放到一个新的DataTable或List里,然后导出excel就行了 至于如何导入导出Excel 看这里
能详细点解释一下如何把不同的数据找出来吗?[/quote] 他回答的已经够详细了,读出数据-> 填充实体 ->对比实体->下步操作. 你觉得上面哪个步骤你解决不了?
crazyzyc 2015-02-12
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
首先你必须把excel里的数据读出来 然后管你是放到一个DataTable里还是2个List<string>里, 最后也不过是循环比较一下,然后再把比较结果放到一个新的DataTable或List里,然后导出excel就行了 至于如何导入导出Excel 看这里
能详细点解释一下如何把不同的数据找出来吗?
於黾 2015-02-12
  • 打赏
  • 举报
回复
首先你必须把excel里的数据读出来 然后管你是放到一个DataTable里还是2个List<string>里, 最后也不过是循环比较一下,然后再把比较结果放到一个新的DataTable或List里,然后导出excel就行了 至于如何导入导出Excel 看这里
老李家的小二 2015-02-12
  • 打赏
  • 举报
回复
Excel数据量不大的话,直接在Excel中比较就好了; 数据量大的话,转成csv,读一行比较一次就好了,最后输出结果
於黾 2015-02-12
  • 打赏
  • 举报
回复
其实你完全可以先找出所有相等的,再把它们从整个列里面抠出去,剩下的就是不相等的
於黾 2015-02-12
  • 打赏
  • 举报
回复
引用 18 楼 crazyzyc 的回复:
是啊,cellA第一个是1,但如果cellB 里面第一个不是1,第二行是1,这个判断是否也成立呢?
如果你要比较不相等,那么你需要比较它跟每一个都不相等,而不是跟任意一个不相等 而比较相等则相反,任意一个相等就行了
於黾 2015-02-12
  • 打赏
  • 举报
回复
你为什么要写双重for循环 到底是想比较相同行的数据 还是说只要这个数据出现过就算相同了? 完全看不懂你的需求和你的代码到底是什么关系
  • 打赏
  • 举报
回复
引用 18 楼 crazyzyc 的回复:
是啊,cellA第一个是1,但如果cellB 里面第一个不是1,第二行是1,这个判断是否也成立呢?
你比较至少是基于某种条件是吧? 比如第一行第一列的A的值是"1" 和那另一表格的第一行第一列的A的值"11" 比较 显示1 ! = 11 这当然不相等了 难道还有其它的情况存在?
加载更多回复(3)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧