导入数据

以重庆邮电项目为例,将Excel表格数据导入数据库中并在页面表格显示数据。首先弹出Excel模态框,要重置表单:KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲formImportExcel…("#btnSaveImport").prop(“disabled”,
true);避免还未上传数据,文件就保存到数据库。
在这里插入图片描述
在临时表重载时,将路径和数据赋值为空,方可实现清空临时表效果,为了提高用户使用的舒适感,设置点击背景和按esc键不关闭动态模态框,然后弹出模态框。因为没有容器存放要导入的数据,必须要下载导入模板:
在这里插入图片描述
控制器:下载数据模板
获取模板路径:string filePath = Server.MapPath("~/Document/Template/考生信息导入模板.xls");
人为设置的物理路径,创建临时文件夹,Document前的~表此项目的根目录。判断模板是否存在Exists(引用IO),获取文件名称:string fileName = Path.GetFileName(filePath);返回文件即可。
Form表单 action=“ImportExcel” method=“post”

    控制器:将导入的Excel表格的数据保存到session,方法路径:ImportExcel,

特殊参数(HttpPostedFileBasefile)
主要思路:获取文件,将文件转换为二进制数组,二进制数组转化成内存流,利用NPOI把内存流中的数据读取成Excel表格,特殊处理把session中ImportExcel移除避免残留以前的数据,如:Session.Remove(“ImportExcel”);
获取文件后缀名:string fileExtension = System.IO.Path.GetExtension(file.FileName);
判断文件类型是否为指定类型的文件,通过Excel表格文件后缀是否是.xls/.XLS,若是则进行创建工作簿,处理表格数据等操作。
如何创建工作簿?

首先声明一个二进制数组byte[]存放文件:byte[] fileBytes= new byte[file.ContentLength];
将传入的文件转化为二进制数组存入fileBytes:file.InputStream.Read(fileBytes,0,file.ContentLength);
将二进制数组转化为内存流:MemoryStreamexcelFileStream = new MemoryStream(fileBytes);
最后将内存流转化为工作簿:
NPOI.SS.UserModel.IWorkbook workbook =
newNPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);
创建完工作簿,需判断是否有工作表:
如果有,查询出所有表格信息,根据名称获取对应的ID;声明一个对象列表,用来存放导入的学生信息;

获取第一个工作表:NPOI.SS.UserModel.ISheet sheet =workbook.GetSheetAt(0);
获取物理行数sheet.PhysicalNumberOfRows,不包括空行与隔行;
判断工作表是否有数据,如果有,将数据装到new出的DataTable中;
获取标题行即表头:NPOI.SS.UserModel.IRowrowHeader = sheet.GetRow(0);
分别获取表格列数和行数(最后一行下标+1);
(普及:FirstCellNum:获取某行第一个单元格下标
LastCellNum:获取某行的列数
FirstRowNum:获取第一个实际行的下标
LastRowNum:获取最后一个实际行的下标);

创建dataTable中的列,循环添加标题行中的各个单元格的数据;
遍历表头行中每一个单元格,获取标题行各个单元格数据,将获取的标题行写进dataTable中;
读取 Excel中的数据;
遍历循环表格第一行下面的数据;
获取行数据:NPOI.SS.UserModel.IRow row =sheet.GetRow(i);

创建DataTable行:DataRow dtRow = dtExcel.NewRow();
如果行数据不为空,遍历循环Excel中一行所有的单元格,将新行数据添加到dataTable中;
声明变量,记录成功和失败数据的条数;

遍历dataTable中的数据(创建表对象保存每一条数据);
通过dataTable中的名称到对应表中查找相应的ID,分别获取学院表、专业表、年级表、班级表的ID和名称。

将学生的所有有关信息获取到,然后将每一条数据添加到对象列表中。
执行代码无误后,将数据保存到session中:Session[“ImportExcel”] = listStudentVo;
返回提示:returnJson.Text= “Excel表格中一共有”+dtExcel.Rows.Count+“条数据,
其中”+ImportSuccess+“条匹配成功,有”+ImportFail+“条匹配失败!”;
上传Excel表格,保存到临时表:
避免取消选择文件后触发上传:
在这里插入图片描述
使用Ajax提交表单,判断是否上传成功,上传成功则启用保存到数据库的按钮,将状态设置为false即可,刷新表格,设置控制器路径,在临时表格分页导入的数据。
控制器:提取session中数据并进行分页,分页传参(LayuiTablePage layuiTablePage)
步骤:
实例化对象列表:List studentVos = new List();
判断session中是否有数据:
在这里插入图片描述

计算数据总条数:int totalRow = studentVos.Count();
提取当前页面数据:可以在分页时根据某条件进行倒叙排序或顺序排序

在这里插入图片描述
实例化LayuiTableData,count获取总行数,data获取总数据,将数据以Json形式返回页面。
如图所示:在导入到表格之前必须确保Excel表头数据于数据库相对应
在这里插入图片描述
导入到数据库部分
保存导入的数据到数据库:
Post请求保存导入的数据的url;
控制器:保存Excel导入的数据
New出一个列表对象:List
studentVos = new List();
判断session中是否有数据;
判断需要保存的数据是否为空;
遍历列表中所有数据,逐条将数据保存到数据库,过程中需要判断导入的数据是否与数据库数据重复,
判断如果没有,则新增用户表,新增成功分别添加用户角色明细表与学生表,新增完三张表,便可以获取里面所有的字段信息,保存于数据库中。
导入到数据库相关提示框:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值