论文部分内容阅读
摘要:项目主要通过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试题自动系统的设计与实现”。
关键词: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试题自动系统的设计与实现”。