今天向大家介绍的是把我导入Excel表格的数据保存到session中,首先呢,给一个方法名为ImportExcel,用HttpPostedFileBase接受页面传过来的文件;然后就开始写代码了:

public ActionResult ImportExcel (HttpPostedFileBase file)
 {
 先new一个ReturnJsonVo,接下来的操作就写在try、catch中:
 ReturnJsonVo returnJson = new ReturnJsonVo();
 try
 {


1、获取读取的文件;2、把文件转换为二进制数组;3、二进制数组转成内 存流;4、利用NPOI把内存流中的数据读取成Excel
把session中的ImportExcel移除避免残留以前数据
Session.Remove(“ImportExcel”);
判断页面传过来的文件是否为Excel表格;
通过GetExtension来获取文件的后缀
string fileExtension = System.IO.Path.GetExtension(file.FileName);
判断文件类型是否为指定的文件类型
if (".xls".Equals(fileExtension) || “.XLS”.Equals(fileExtension))
{
声明二进制数组存放文件
byte[] fileBytes = new byte[file.ContentLength];
将传入的文件转化为二进制的数组存入fileBytes
file.InputStream.Read(fileBytes, 0, file.ContentLength);
将二进制数组转化为内存流
MemoryStream excelFileStream = new MemoryStream(fileBytes);
将内存流转化为工作簿
NPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);
判断工作簿中是否有工作表
if (workbook.NumberOfSheets > 0)
{
查询出 学院,专业,年级,班级 的信息:用来根据名称获取对应的ID
List<SYS_Academe> dbAcademe = (from tbAcademe in myModels.SYS_Academe
select tbAcademe).ToList();
List<SYS_Specialty> dbSpecialty = (from tbSpecialty in myModels.SYS_Specialty
select tbSpecialty).ToList();
List<SYS_Grade> dbGrade = (from tbGrade in myModels.SYS_Grade
select tbGrade).ToList();
List<SYS_Class> dbClass = (from tbClass in myModels.SYS_Class
select tbClass).ToList();
声明对象列表,存放导入的学生信息
List listStudentVo = new List();
获取第一个工作表
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
PhysicalNumberOfRows 获取的是物理行数,
也就是不包括那些空行(隔行)的情况。
判断工作表中是否有数据
if (sheet.PhysicalNumberOfRows > 0)
{
将数据装到DataTable中
定义datatable
DataTable dtExcel = new DataTable();
获取标题行

NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(0);
 /*
 FirstCellNum:获取某行第一个单元格下标
 LastCellNum:获取某行的列数
 FirstRowNum:获取第一个实际行的下标
 LastRowNum:获取最后一个实际行的下标
 */


获取表格列数
int cellCount = rowHeader.LastCellNum;
获取表格行数(最后一行下标+1)
int rowCount = sheet.LastRowNum + 1;
创建dataTable中的列,循环添加标题行中各个单元格的数据
for (int i = rowHeader.FirstCellNum; i < cellCount; i++)
{
遍历表头行中每一个单元格,获取标题行各个单元格的数据
DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
将获取到的标题行的数据放到dataTable中
dtExcel.Columns.Add(dtColumn);
}
接下来就是处理数据了:
首先读取Excel中的数据

//(sheet.FirstRowNum) 第一行是标题
 for (int i = sheet.FirstRowNum + 1; i < rowCount; i++)
 {


获取行(1、2、3…)数据
NPOI.SS.UserModel.IRow row = sheet.GetRow(i);
创建DataTable行

DataRow dtRow = dtExcel.NewRow();
 if (row != null)
 {


遍历excel中一行所有的单元格

for (int j = row.FirstCellNum; j < cellCount; j++)
 {
 if (row.GetCell(j) != null)
 {
 dtRow[j] = row.GetCell(j).ToString();
 }
 }
 }
 新行添加到dataTable中
 dtExcel.Rows.Add(dtRow);
 }


声明变量,记录成功和失败数据的条数
int ImportSuccess = 0;
int ImportFail = 0;
遍历dataTable中的数据

foreach (DataRow row in dtExcel.Rows)
 {


创建studentVo对象保存每一条数据

studentVo student = new studentVo();
 try
 {


获取学院ID 和学院名称
通过dataTable中的AcademeName到dbAcademe中查找 相应的AcademeID
student.AcademeName =row["学院 "].ToString().Trim();
student.AcademeID = dbAcademe.Where(m => m.AcademeName == student.AcademeName).SingleOrDefault().AcademeID;
获取专业id和名称
根据学院ID和专业名称获取相应的专业ID
student.SpecialtyName = row[“专业”].ToString().Trim();
student.SpecialtyID = dbSpecialty.Where(m => m.AcademeID == student.AcademeID && m.SpecialtyName == student.SpecialtyName).SingleOrDefault().SpecialtyID;
获取年级ID 和名称
根据学院ID以及年级名称获取相应的年级ID
student.GradeName = row[“年级”].ToString().Trim();
student.GradeID = dbGrade.Where(m => m.AcademeID == student.AcademeID && m.GradeName == student.GradeName).SingleOrDefault().GradeID;
获取 班级ID和名称
根据学院ID&专业ID&年级ID&班级名称获取班级ID
student.ClassName = row[“班级”].ToString().Trim();
student.ClassID = dbClass.Where(m => m.AcademeID == student.AcademeID && m.SpecialtyID == student.SpecialtyID && m.GradeID == student.GradeID && m.ClassName == student.ClassName).SingleOrDefault().ClassID;
student.StudentNumber = row[“学号”].ToString().Trim();
student.StudentName = row[“姓名”].ToString().Trim();
student.StudentIDNum = row[“身份证号”].ToString().Trim();
student.StudentSex = row[“性别”].ToString().Trim();
student.UserNuber = row[“账号”].ToString().Trim();
将每一条数据都添加到对象列表中

listStudentVo.Add(student);
 ImportSuccess++;
 }
 catch (Exception e)
 {
 returnJson.State = false;
 returnJson.Text = “数据处理出错”;
 ImportFail++;
 }
 }
 将数据保存到session中
 Session[“ImportExcel”] = listStudentVo;
 returnJson.State = true;
 returnJson.Text = “Excel表格中一共有” + dtExcel.Rows.Count + “条数据,其中” + ImportSuccess +
 “条匹配成功,有” + ImportFail + “条匹配失败!”;
 }
 else
 {
 returnJson.State = false;
 returnJson.Text = “工作表中没有数据!”;
 }
 }
 else
 {
 returnJson.State = false;
 returnJson.Text = “工作簿中没有工作表!”;
 }
 }
 }
 catch (Exception e)
 {
 returnJson.State = false;给它的返回值为false;
 eturnJson.Text = “上传失败,类型不对应/检查是否有工作表/检查是否有数据!”;
 }
 return Json(returnJson, JsonRequestBehavior.AllowGet);
 }

以上的内容是老师的授课内容,我自己敲了两次,还不是很清楚,就只知道一个大概.