用C#实现Excel文件比对

来源 :中小企业管理与科技·下旬刊 | 被引量 : 0次 | 上传用户:sl604
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:项目主要通过C#语言操作Excel。服务器端响应客户端的请求,随机抽取试题库中的试题,发送给客户端,再由客户端将Excel文件上传回服务器端,通过C#语言实现将上传的Excel与服务器端的标准Excel文件进行比对,找出两Excel文件的相同之处和不同之处,通过数据库表中的得分点计算考生的实际得分,并反馈。
  关键词:C# Excel Range对象 比对
  1 概述
  实现Excel考试评分系统,将客户端上传的Excel与服务器端的题库中的Excel进行比对,并找出文件中的差异,此通过C#的编程来实现该操作。
  C#提供了一些方法能够与Excel进行交互,如:Rang对象中的方法。
  Range对象,在Excel编程中,是使用最频繁的对象之一。Range代表了一个单元格,一行,一列,一个包含了多个单元格的区域,甚至是在多个表中的一组单元格。通过使用range()可以确定比较范围。
  2 详细设计
  2.1 调用COM组件 Excel提供了数以百计可以用来交互的对象,但是在Excel编程中,使用的最为频繁的是以下的四个对象。
  2.1.1 Application对象:代表了Excel应用程序的本身,展示了正在运行的应用程序的大量信息。
  2.1.2 Workbook对象:workbook对象是workbooks集合的成员,代表了Microsoft Excel的工作簿。
  2.1.3 Worksheet对象:worksheet对象是包含于workbook对象,代表了Microsoft Excel的工作表。
  2.1.4 Range对象:Range对象包含于worksheet对象,代表了Microsoft Excel的工作表中的一个或者多个单元格。
  2.2 详细设计内容 简单的模拟Excel的文件进行直接比对,实现Excel比对的部分功能。设计思路以及模拟代码如下:
  2.2.1 关于ASCII码转换问题:通过Asc()方法,将字符转换为Ascii码;通过Chr()方法,将Ascii码转换为字符。
  2.2.2 打开Excel工作表和服务器端的Excel工作表。
  ExcelApplication excel = new excelApplication();
  excel.Visible = false;
  try {
   Excel.Workbook workbook1=
  excel.Workbooks.Open(Uploadxls,
  Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing,
  Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
  Excel.Workbook workbook2=excel.Workbooks.Open(Servicexls,
  Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing,Type.Missing, Type.Missing);
  Excel.Worksheet sheet1=(Excel.Worksheet)workbook1.Sheets["sheet1"];
  Excel.Worksheet sheet2=(Excel.Worksheet)workbook2.Sheets["sheet1"];
  在Excel考试中,针对格式也有严格的要求,通常要求工作表的起始位置是一致的,否则需要去计算两个Excel的工作表中的行列的差值,再使用嵌套循环,以及使用worksheet.Cells[rows,columns]来获取第rows行,第columns列的内容;设计中默认从A1的位置开始遍历,简单的示例代码如下:
  2.2.3 获取文件的行列数
  Excel.Range rang2;
  int rowscount=sheet2.UsedRange.Cells.Rows.Count;
  int columnscount=sheet2.UsedRange.Cells.Columns.Count;
  int rowscount1=sheet1.UsedRange.Cells.Rows.Count;
  int columnscount1=sheet1.UsedRange.Cells.Columns.Count;
  2.2.4 文件内容的比对:考试系统需要自动去完成比对,在此需要先确定两个Excel工作表起始位置。所以在测试中,有A1开始遍历单元格。
  for (int j=Asc("A");j<=columnscount;j++){
   for (int i=1;i<=rowscount;i++){
  if(((sheet1.Cells[i,j-64]).Text!))!=((sheet2.Cells[i,j-64]).Text)) {
  errorrows=i;
  errorcolumns=Chr(j);
  //行列并成字符串,反馈错误的单元格位置。
  errorcells=String.Concat(errorcolumns,
  Convert.ToString(errorrows);
  //读取错误的单元格 rang2=sheet1.get_Range(errorcells,Type.Missing);
  //设置单元格的背景颜色为淡紫色,用来标记做错的地方。
  rang2.Interior.ColorIndex=39;
  ……
  }
   }
   }
  比较了两张表格中单元格的数值,再配合数据库的得分点,可统计Excel考题中的基础题得分情况,实现了考试系统的部分功能。以上程序给出了部分功能和设计思想。
  3 测试结果
  下面图1和图2是两个Excel比对的原文件,图3是比对后的结果。
  在整个考试系统,还需要对Excel的单元格的格式做比对,要获取Excel的各类信息进行比对。
  4 总结
  首先,整体的设计是以COM组件方式实现C#对Excel的调用。若要完善考试评分系统,需要获取Excel的种种信息,不仅限于数据、图表。还有颜色、字体等各种格式,进行全面的比对,评测。
  参考文献:
  [1]王小科,徐薇.C#从入门到精通[M].清华大学出版社,2010.7
  [2]王路,王改性,彭海云.Visual C#动态网站开发技术与实践[M].电子工业出版社,2007.7.
  [3]刘强,张高.C#编程语言程序设计与开发[M].清华大学出版社,2004.
  [4]王华杰.精通C#数据库开发[M].清华大学出版社,2004.
  [5]王谦.用VB实现Excel文件比对[J].安徽电子信息职业技术学院学报,2008(4).
  基金项目:2010浙江省大学生新苗计划项目“基于.net的word/excel试题自动系统的设计与实现”。
其他文献
故障现象:一台6135D型柴油机,在使用中发现冷却水消耗过快。经检查,发现是第三缸气缸盖进气门导管的水套外壁有一条裂纹。更换新气缸盖后,使用不到两个月时间,在第三缸气缸盖进气
<正>~~
期刊
导致发动机出现加速无力故障,一般有以下几种原因:
由广东瑞图万方科技有限公司开发的“车载通”NF-41分体式多媒体与无线通讯高级导航电脑成功推向市场,这是我国首个支持道路交通实时信息系统的汽车导航系统。
故障现象:一辆东风EQ1092型:一载货汽车,在重载下用一档起步后,变速杆不能从一档脱出回到查档,即发生“卡档”现象。
【摘要】在高中阶段,学生的身心发展呈现出独特的特点,教师在教育教学活动组织的过程中,要充分体现学生的学习主体地位,激发学生学习动力,提高学生的参与程度,以此来促进教学成效的全面提升。笔者多年从事高中语文教学活动,在尊重学生主体地位方面进行了积极的研究与分析,本文将作简要论述。  【关键词】学生;主体;地位;教学    传统的高中语文教学,教师习惯于强化知识的传授,教学模式单一,以教师的单向讲解为主
北京切诺基吉普车既有传统吉普车的良好越野性能,又具备一般轿车的乘坐舒适性,应用领域较宽,在国内的保有量相当多.
在全球能源紧缺的今天能源成为全球性战略投资,倡导循环经济,发展节约型社会已成为共识。人大代表尹家绪认为;在这种环境下,倡导并鼓励环保节能的小型汽车已是大热所趋。
教师在教学过程中应与学生积极互动,共同发展,要处理好传授知识与培养能力的关系。因此,要改变单一的学习方式,倡导探究性学习,这是新课改的一个基本要求。根据学生身心发展和语文学习的特点,关注学生的个体差异和不同的学习需求,爱护学生的好奇心、求知欲,充分激发学生的主动意识和进取精神,倡导自主、合作、探究的学习方式。我结合自己的经验,提出几点体会。  一、营造良好探究氛围  小学语文探究性学习需要一定的环
目的了解西藏干部常见口腔科疾病检出率现状,为更好地做好西藏医疗保健工作提供依据。方法对2004年门诊696名干部的体检资料进行分析。结果西藏地区干部常见口腔疾病检出率为4