需求

客户有两个xlsx表格,表格1数据全,但是身份证号码和手机号码有错误;表格2数据少些,但是身份证号码和手机号码全部正确,用户要求把表格2中的身份证号码和手机号与表格1作比较,如果表格1的身份证号码或手机号错误,进行更正

我对xlsx表格不是很熟悉,所以用c#编写了一个小程序,主要用Aspose.Cells.dll实现了用户的需求(下载dll请单击这里),现将主要代码记录如下:

public static void Compare(string ExcelPath1, string ExcelPath2){//try//{//先获得WorkBook 类似数据集DataSetAspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(ExcelPath1);//获取数据工作表 可以用数字索引 类似DataTableAspose.Cells.Worksheet sheet = workbook.Worksheets[0];//数据范围 默认从第0行 第0列开始//最大行 最大列//是否读取列字段名  Aspose.Cells.Workbook workbook2 = new Aspose.Cells.Workbook(ExcelPath2);Aspose.Cells.Worksheet sheet2 = workbook2.Worksheets[0];Cell startcell = sheet.Cells[0, 0];for (int i = 0; i < sheet2.Cells.MaxDataRow; i++){Cell startcel = sheet2.Cells[i, 5];if (startcel.Value!=null&&startcel.Value.ToString()!="姓名"){Cell firstCell2 = sheet.Cells.FindStringContains(startcel.Value.ToString(), startcell);if (sheet2.Cells[i, 9].Value==null){continue;}if (sheet2.Cells[i, 9].Value != null && sheet.Cells[firstCell2.Row, firstCell2.Column + 1].Value == null){sheet.Cells[firstCell2.Row, firstCell2.Column + 1].PutValue(sheet2.Cells[i, 9].Value.ToString().Trim());Style style = sheet.Cells[firstCell2.Row, firstCell2.Column + 1].GetStyle();style.Font.Color = Color.Yellow;sheet.Cells[firstCell2.Row, firstCell2.Column + 1].SetStyle(style);WriteLog(startcel.Value.ToString() + "====2");}else{if (sheet2.Cells[i, 9].Value.ToString().Trim() != sheet.Cells[firstCell2.Row, firstCell2.Column + 1].Value.ToString().Trim()){sheet.Cells[firstCell2.Row, firstCell2.Column + 1].PutValue(sheet2.Cells[i, 9].Value.ToString().Trim());Style style = sheet.Cells[firstCell2.Row, firstCell2.Column + 1].GetStyle();style.Font.Color = Color.Red;sheet.Cells[firstCell2.Row, firstCell2.Column + 1].SetStyle(style);WriteLog(startcel.Value.ToString());}}if (sheet2.Cells[i, 16].Value == null){continue;}if (sheet2.Cells[i, 16].Value != null && sheet.Cells[firstCell2.Row, firstCell2.Column + 2].Value == null){sheet.Cells[firstCell2.Row, firstCell2.Column + 3].PutValue(sheet2.Cells[i, 16].Value.ToString().Trim());Style style = sheet.Cells[firstCell2.Row, firstCell2.Column + 3].GetStyle();style.Font.Color = Color.Yellow;sheet.Cells[firstCell2.Row, firstCell2.Column + 3].SetStyle(style);WriteLog(startcel.Value.ToString() + "====3");}else{if (sheet2.Cells[i, 16].Value.ToString().Trim() != sheet.Cells[firstCell2.Row, firstCell2.Column + 2].Value.ToString().Trim()){sheet.Cells[firstCell2.Row, firstCell2.Column + 3].PutValue(sheet2.Cells[i, 16].Value.ToString().Trim());Style style = sheet.Cells[firstCell2.Row, firstCell2.Column + 3].GetStyle();style.Font.Color = Color.Red;sheet.Cells[firstCell2.Row, firstCell2.Column + 3].SetStyle(style);WriteLog(startcel.Value.ToString() + "====4");}}}}// dt = sheet.Cells.ExportDataTable(0, 0, sheet.Cells.MaxDataRow + 1, sheet.Cells.MaxDataColumn + 1, true);//Cell firstCell = sheet.Cells.FindStringContains("赵秀林", startcell);//Cell cell = sheet.Cells[firstCell.Row, firstCell.Column + 2];//cell.PutValue(123456.789);//Style style = cell.GetStyle();//style.Font.Color = Color.Red;//cell.SetStyle(style);workbook.Save("d:\\z3.xlsx");// DataTableExport(dt, "d:\\z1.xlsx");//}//catch (Exception ex)//{//    dt = null;//}// return dt;}

实现了用户需求后,我整理其它一些代码以备后用。

1、xlsx转DataTable

public static DataTable GetDataTable(string ExcelPath, string SheetName){DataTable dt = new DataTable();try{//先获得WorkBook 类似数据集DataSetAspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(ExcelPath);//获取数据工作表 可以用数字索引 类似DataTableAspose.Cells.Worksheet sheet = workbook.Worksheets[SheetName];//数据范围 默认从第0行 第0列开始//最大行 最大列//是否读取列字段名               dt = sheet.Cells.ExportDataTable(0, 0, sheet.Cells.MaxDataRow + 1, sheet.Cells.MaxDataColumn + 1, true);Cell startcell=sheet.Cells[0,0];Cell firstCell = sheet.Cells.FindStringContains("赵秀林", startcell);Cell cell = sheet.Cells[firstCell.Row,firstCell.Column+2];cell.PutValue(123456.789);Style style = cell.GetStyle();style.Font.Color = Color.Red;cell.SetStyle(style);}catch (Exception){dt = null;}return dt;}

2、DataTable转Excel

        /// <summary>
/// DataTable数据导出Excel
/// </summary>
/// <param name="data">DataTable 数据</param>
/// <param name="filepath">文件保存路径名称</param>public static void DataTableExport(System.Data.DataTable data, string filepath){// 创建工作簿Aspose.Cells.Workbook book = new Workbook();// 创建工作表Worksheet sheet = book.Worksheets[0];// 单元格Cells cells = sheet.Cells;// 生成行 列名行 for (int i = 0; i < data.Columns.Count; i++){cells[0, i].PutValue(data.Columns[i].ColumnName);}// 生成数据行 for (int i = 0; i < data.Rows.Count; i++){for (int k = 0; k < data.Columns.Count; k++){cells[1 + i, k].PutValue(data.Rows[i][k].ToString()); //添加数据}}// 自适应宽sheet.AutoFitColumns();// 保存book.Save(filepath);GC.Collect();}

源代码下载请单击这里

【C#】Excel操作——两个Excel表格比较,如果相同跳过,如果不同将复制到一个表格相关推荐

  1. 怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格

    怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格 618又来了!每年的这个时候,都是电商促销活动的高潮,各种优惠活动层出不穷,不管是对你是做电商运营的还是一个消费者,都很有挑战性 ...

  2. Python操作两个Excel表,筛选出新增和已删除的条目

    今天实习收到了一个任务,手头有两个excel表,分别是4月份和五月份的两份资料,需要找出五月份excel和四月份相比较被删除和新增的条目.(他们事业单位平时都是人工处理这些任务,几百个条目这得校对到什 ...

  3. vb.net 教程 10-2 Excel操作6 更改Excel单元格字体

    版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的. 通过修改Excel.Rang.Font的几个成员就可以修改相应Range内的字体,直接给出代码: ...

  4. 在C#中进行Excel操作需要using Excel = Microsoft.Office.Interop.Excel;

    在vs的项目中找到添加引用 在COM中找到 Microsoft Excel x.0(版本号) Object Library 之后引用 using Excel = Microsoft.Office.In ...

  5. Pandas操作两个Excel实现数据对应行的合并

    tags: Python Pandas Excel 写在前面 最近有朋友问我怎么把一个Excel工作表中的数据按照对应的匹配规则放到另外一个表中, 要求是两个对应的列要相同, 具体来看就是sheet1 ...

  6. matlab excel操作,Matlab读取excel文件里数据的操作流程

    亲们入手Matlab软件过程里会读取excel文件里数据吗?下面小编就提供了Matlab读取excel文件里数据的操作流程,有需要的朋友一起来看看吧. 读取sheet1中的所有数据 以03版excel ...

  7. Html如何在表格中加一条竖线,在Word中,给一个表格多加一横线和竖线,怎么操作呢?...

    回答: 不好意思刚发现这个方法不能用,百度又不让我删,不过我还有别的方法,等下班了再回答你... --------------------------------------------------- ...

  8. 数据转换excel操作 Microsoft.Office.Interop.Excel.dll的使用

    引用:http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到E ...

  9. 【转载】Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Exce ...

  10. Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    原文地址为: Excel操作 Microsoft.Office.Interop.Excel.dll的使用 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Exc ...

最新文章

  1. halcon彩色图像颜色处理算子,持续更新
  2. 用DeBug的方式,带你掌握HBase文件在Snapshot的各种变化
  3. python mvc框架_MVC其实很简单(Django框架)
  4. Vue : Expected the Promise rejection reason to be an Error
  5. javaw java_我可以找出java程序是使用java还是javaw启动的
  6. 广电CMMB拒考手机电视国标 新面孔IMMB欲分羹
  7. Python爬虫,批量下载小说网站上的小说!
  8. php移动端可拖动可视化,可视化编辑uniapp项目DIY拖拽
  9. 获取安卓手机唯一设备号
  10. 制图大赛计算机二维绘图,第五届“高教杯”全国大学生先进成图技术与产品信息建模创新大赛 机械类 计算机绘图试卷.pdf...
  11. 赵俊峰内蒙古大学计算机学院,内蒙古大学计算机学院研究生导师:赵俊峰
  12. 大学生在线书籍网站 二手交易书籍网站制作 网页设计制作作业作品下载 dreamweaver制作静态html网页设计作业作品
  13. sphinx在windows下的简单安装与使用
  14. 用 django 构建翻译网站——软件工程课程设计
  15. 与思科交换机三层链路聚合连接 ❀ 飞塔 (Fortinet) 防火墙
  16. Tuning (调试)
  17. Spring Cloud中的Eureka和Zookeeper的区别在哪?
  18. 【Java面试】Linux
  19. c语言打印出水花数,四叶玫瑰数,五角星数等等的数字
  20. 知了猴的营养成分和作用

热门文章

  1. xp计算机找不到音量调节,winxp系统电脑音量无法调节不能调节声音的恢复方案...
  2. 史上最全:Mac搭建Airtest IDE +IOS 测试环境
  3. js报错未定义的ajax,ReactJS和AJAX未捕获TypeError:无法读取未定义的属性'错误'
  4. Docker离线安装部署文档
  5. SaaS运营实战:B端与C端的区别在哪?
  6. 市场需求文档MRD书写范例
  7. eos 源代码学习笔记二
  8. 2021-08-26小白笔记2
  9. 什么是SEO?SEO的区别在哪里?
  10. 【C#】打印机ZPL指令,打印文本,中文,条码,图片