失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 导入excel表格 保存到临时表

导入excel表格 保存到临时表

时间:2024-04-20 23:02:36

相关推荐

导入excel表格 保存到临时表

开发工具与关键技术:MVC

作者:文泽钦

撰写时间:5月16日

上存excel表格前要判断要上存的文件是否为空,要上存的文件为空时直接返回return返回,若文件不为空则执行下一步。

//上存excel表格,保存到临时表function upExcel() {//避免取消选择文件后触发上存if ($("#fileUploadExecl").val() == "" || $("#fileUploadExecl").val == undefined){return;}var layIndex = layer.load();//显示加载层//提交表单$("#formImportExcel").ajaxSubmit(function (Msg) {layer.close(layIndex);//关闭加载层if (Msg.State) {//启用保存到数据库的按钮$("#btnSaveImport").prop("disabled", false);//表格数据重载tabEmployeeImport.reload({url: "SelectSessImportEmployee"});layer.alert(Msg.Text, { icon: 1, title: "提示" });} else { //清空tabletabEmployeeImport.reload({url: '',data: []});layer.alert(Msg.Text, { icon: 0, title: "提示" });}}); }

将导入的excel表格数据保存到session的代码有点点多,用点心去看就会发现并不是那么复杂。

public ActionResult ImportExcel(HttpPostedFileBase file) {ReturnJsonVo returnJson = new ReturnJsonVo();try{//清除session中的ImportExcel残留数据Session.Remove("ImportExcel");//判断页面传过来的文件是否为Excel表格//获取文件后缀名string fileExtension = System.IO.Path.GetExtension(file.FileName);//.xlsif (".xls".Equals(fileExtension) || ".XLS".Equals(fileExtension)){//声明二进制数组存放文件byte[] fileBytes = new byte[file.ContentLength];//将传入的文件转化为二进制的数组存入fileBytesfile.InputStream.Read(fileBytes, 0, file.ContentLength);//将二进制的数组转化为内存流MemoryStream excelFileStream = new MemoryStream(fileBytes);//将内存流转化为工作簿,引入NPOINPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);//判断工作簿中是否有工作表if (workbook.NumberOfSheets > 0) {//查询部门、职位信息,用来根据名称获取对应的IDList<SYS_Department> dbDepartment = (from tbDepartment in myModels.SYS_Departmentselect tbDepartment).ToList();List<SYS_Position> dbPosition = (from tbPosition in myModels.SYS_Positionselect tbPosition).ToList();//声明对象列表,存放导入的学生信息List<employeeVo> listEmployeeVo = new List<employeeVo>();//获取第一个工作表NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);//PhysicalNumberOfRows 获取的是物理行数,也就是不包括那些空行(隔行)的情况。//判断工作表中是否有数据if (sheet.PhysicalNumberOfRows > 0){//将数据装到DataTable中//定义DataTableDataTable dtExcel = new DataTable();//获取表题行NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(0);//获取表格列数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) {//创建employeeVo对象保存每一条数据employeeVo employee = new employeeVo();//捕获异常try{//获取部门id和部门名称//通过DataTable中的Department到dbDepartment中查找相应的Departmentemployee.DeoartmentName = row["部门"].ToString().Trim();employee.DepartmentID = dbDepartment.Where(m => m.DeoartmentName == employee.DeoartmentName).SingleOrDefault().DepartmentID;//获取职位id和职位名称//根据职位id和职位名称获取相应的职位IDemployee.PositionName = row["职位"].ToString().Trim();employee.PositionID = dbPosition.Where(m => m.PositionName == employee.PositionName).SingleOrDefault().PositionID;employee.EmployeeNumber = row["编号"].ToString().Trim();employee.EmployeeName = row["姓名"].ToString().Trim();employee.Phone = row["电话"].ToString().Trim();employee.Cellphone = row["手机"].ToString().Trim();employee.Address = row["地址"].ToString().Trim();//将每一条数据都添加到对象列表中listEmployeeVo.Add(employee);ImportSuccess++;}catch (Exception) {returnJson.State = false;returnJson.Text = "数据处理出错";ImportFail++;}}//将数据保存到session中Session["ImportExcel"] = listEmployeeVo;returnJson.State = true;returnJson.Text = "Excel表格中一共有" + dtExcel.Rows.Count + "条数据,其中" + ImportSuccess + "条匹配成功,有" + ImportFail + "条匹配失败!";} else{returnJson.State = false;returnJson.Text = "数据表为空!";}}else{returnJson.State = false;returnJson.Text = "工作簿中没有数据表!";}} else{returnJson.State = false;returnJson.Text = "文件类型错误,请上传Excel文件!";}}catch (Exception) {returnJson.State = false;returnJson.Text = "数据异常!";}return Json(returnJson, JsonRequestBehavior.AllowGet); }

导入的控制器基本代码写完了,剩下的就是写保存到内存流的代码了,多看几遍或者多写几遍就会发现代码的结构都基本相同,唯有不同的只是命名了。

现在写分页操作,因为要考虑到导入excel表格的数据可能会比较多,要使用分页功能,分页的写法很简单,先提取session中的数据、进行分页操作。

public ActionResult SelectSessImportEmployee(LayuiTablePage layuiTablePage){List<employeeVo> listStudentVo = new List<employeeVo>();if (Session["ImportExcel"] != null) {listStudentVo = Session["ImportExcel"] as List<employeeVo>;}//计算数据总条数int totalRow = listStudentVo.Count();List<employeeVo> listStu = listStudentVo.OrderByDescending(m => m.EmployeeID)//根据学生id倒叙排序.Skip(layuiTablePage.GetStartIndex())//分页.Take(layuiTablePage.limit)//每页多少条数据.ToList();//实例化LayuiTableData<employeeVo> layuiTableData = new LayuiTableData<employeeVo>();layuiTableData.count = totalRow;layuiTableData.data = listStu;return Json(layuiTableData, JsonRequestBehavior.AllowGet);}

启动看看是否能上存到session。

现在有两条数据匹配成功了,保存到数据库的方法没有写,现在只是临时保存到session中。

如果觉得《导入excel表格 保存到临时表》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。