开发工具与关键技术:VS/MVC
作者:何桂朋
撰写时间:2019年4月13日

我在做“Excel工作簿”导入发现了一个问题,每当我点击“导入到数据库”就会出现,

例如:下面的提示

excel导入 javascript_MVC

这些提示,会告诉使用者:“重复多少条”、“失败多少条”、“成功多少条”。这些信息除了告诉使用者要不要重新检查,就基本没什么用。

就举一个“学校的学生信息导入”为例,如果是一个班45人左右,就算是出错10人,也要重新检查。那么,如果遇上的是一个学校的学生呢?那可是几千条信息。就这种提示方式即容易出错又效率低。

为了可以提高效率,我突然想出一个方法:在Excel工作簿上传时,先不要直接去数据库匹配数据,而是在页面弹出表格提示(如下图),表格含有上传的信息同时加上一项“错误原因”,这样做到地提高效率。

excel导入 javascript_excel导入 javascript_02


做法:

在完成“工作簿workbook的内存流转化成数组”之后,

先声明三张列表,用来存储成功信息、错误信息、总和信息。

//对象列表
List<Student> listStudentVo = new List<Student>();//成功集合列表
List<Student> ListSum = new List<Student>();      //总数集合列表
 List<Student> ListEorror = new List<Student>();   //错误集合列表

然后:(以学院名称为例)

try{
  	  //创建studentVo对象保存每一条数据
        Student student = new Student();
      //获取学院ID 和学院名称
     student.AcademeName = row["学院"].ToString().Trim();
     student.Eorror = "学院名称有误";
     //通过dataTable中的AcademeName到dbAcademe中查找相应的AcademeID
 student.AcademeID=dbAcademe.Where(p=>p.AcademeName==student.AcademeName)
.SingleOrDefault().AcademeID;

    //根据学院ID和专业名称获取相应的专业ID
      student.SpecialtyName = row["专业"].ToString().Trim();
      student.Eorror = "专业有误";
    student.SpecialtyID=dbSpecialty.Where(p=>p.AcademeID==student.AcademeID&& p.SpecialtyName == student.SpecialtyName).SingleOrDefault().SpecialtyID;
。。。。。。(省略年级、班级、学号、)
  student.Eorror = "";
  listStudentVo.Add(student);
  ListSum.Add(student);
}

获取学院名称,然后通过学院名称去筛选出相对应的学院ID,并将student.Eorror 赋值为"学院名称有误",获取专业名称过程中,将student.Eorror 重新赋值为"专业有误",最后在所有信息筛选完成之后将student.Eorror 重新赋值为空,并将student 储存到listStudentVo (成功集合列表)、ListSum(总和集合列表)中,如果信息上面信息不匹配时,‘SingleOrDefault’就会报错,然后有catch捕捉错误,同时student.AcademeName、student.SpecialtyName、student.GradeName等等重新赋值,
并将student添加给ListEorror(错误)、ListSum(总和集合列表)中。

catch (Exception )
{
   student.AcademeName = row["学院"].ToString().Trim();
    student.SpecialtyName = row["专业"].ToString().Trim();
	student.GradeName = row["年级"].ToString().Trim();
	student.ClassName = row["班级"].ToString().Trim();
    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();
     ListEorror.Add(student);
     ListSum.Add(student);   
     intFail++;//记录失败的条数
    returnJson.State = false;
                                    
 }

然后用Session保存三种数据。

//把数据保存到Session当中
   Session["EorrorVo"] = ListEorror;//错误
   Session["SumExcel"] = ListSum; //总数
   Session["ImportExcel"] = listStudentVo;// 正确

到了这一步基本可以了。
“Session[“EorrorVo”]”可以做个错误导出,
“Session[“SumExcel”]”可以返回页面显示给用户,
“Session[“ImportExcel”]”可以导入数据库。