将Excel里面的数据导入到数据库

今天我要讲的内容是如何将Excel里面的数据导入到数据库,首先我们打开开发工具(VS),在前面我们学过如何查询数据,在这里我就不多说了。在表格上面,有两个按钮,一个是导入考生,一个是导出考生。今天我要讲的是导入按钮的功能,按钮的代码如下:
在这里插入图片描述
在这里插入图片描述
图片里面的序号,学号,姓名,身份证号,性别,学院,专业,年级,班级,还有账号是我们需要导入的,操作按钮不用导入,因为操作按钮是我们自己写的代码。样式布局完整之后,我们先把模态框里面的内容布局,具体的代码如下:
在这里插入图片描述
上面的第一部分,主要是打开模态框和选择xls文件,第二部分是我们要下载导入模板和导入到数据库的两个按钮,第三部分,是导入数据临时存放的表格。实现的效果图如下:
在这里插入图片描述
在上面,我们已经把样式布局完整了。现在我们要做的功能是怎样弹出模态框;重置表单;禁用保存到数据库的按钮;清空里面的临时表;点击背景时不关闭动态模态框,按下esc时不关闭动态模态框。要做这五个功能之前,我们先把临时表里面的内容给布局完整,因为前面查询数据的时候声明了layui,所以这次不用这次声明,我们声明一下临时表里面的表格,然后在elem里面获取表格的id,在cols下面声明我们需要导入的内容名称,在这里我们不能用url来获取数据,所以我们声明表的时候,先让表格里面的数据为空。把临时表的内容布局完整之后,我们把刚才要做的五个功能的方法写一下,代码如下:
//弹出导入数据的模态框
function openImportExcel()
{
//重置表单
$("#formImportExcel").resetForm();
//禁用保存到数据库的按钮
$("#btnSaveImport").prop(“disabled”, true);
//清空临时表
tabStudentImport.reload({
url: “”,
data: []
});
//点击背景时不关闭动态模态框,按下esc时不关闭动态模态框
$("#modImportExaminee").modal({
backdrop: false,
keyboard: false
});
//弹出模态框
$("#modImportExaminee").modal(“show”);
}
获取我们要导入的按钮,当我们点击导入按钮的时候弹出模态框,重置里面的内容和清空数据。
在第一部分代码input那里有个accept=".xls,.xlsx"属性,主要是判断一下我们上传的文件类型,因为在Excel里面有两种结尾形式。接下来做我们要下载的模板的按钮,获取下载模板的按钮,当点击下载模板的时候实现控制器里面的代码,也就是下面DownImportTemplate控制器里面的内容。下载模板代码如下:
function downImportTemplate()
{
window.open(“DownImportTemplate”);
}
我们来到控制器里面,把DownImportTemplate写一下里面的内容。我们要下载模板的话,首先我们这个项目要有这个模板才可以。我们来到项目里面添加一个文件夹为Document,在Document里面再添加一个文件夹为Template,然后把我们要导入的模板放在里面。我们把模板引进来之后,首先获取一下模板所在的路径,在我的项目里面路径是,第一步://获取模板所在的路径
string filePath = Server.MapPath("~/Document/Template/考生信息导入模板.xls");
第二步是判断一下模板是否存在,下面我用了if…else的判断语句,具体代码如下:
if (System.IO.File.Exists(filePath))
{
//获取文件名称
string fileName = Path.GetFileName(filePath);
//返回文件
return File(new FileStream(filePath, FileMode.Open), “application/octet-stream”, fileName);
}
else
{
return Content(“模板文件不存在,请联系系统运维人员。”);
}
这样我们就把DownImportTemplate里面的内容写完整了,接下来是上传Excel文件,保存到临时表,在第一部分,我给了input标签一个οnchange="upExcel()"的事件,调用一下upExcel,假如我们选择模板的时候,点击取消,为了避免点击取消的时候上传文件,所以我做了一个判断,代码如下://避免取消选择文件后触发上传

if ($("#fileUploadExecl").val() == “” || $("#fileUploadExecl").val() == undefined) {
return;
}
当上传文件#fileUploadExecl为空的时候,直接让它return。否则就是打开加载层,提交模态框。内容有点多,希望各位读者细心阅读。具体代码如下:
//打开加载层
var layerIndex = layer.load();
//提交表单
$("#formImportExcel").ajaxSubmit(function (msg) {
layer.close(layIndex);
if (msg.State) {
//启用保存到数据库的按钮
$("#btnSaveImport").prop(“disabled”, false);
//表格刷新
tabStudentImport.reload({
url: “SelectSessImportStudent”
});
layer.alert(msg.Text, { icon: 1, title: “提示” });
}
else {
//清空table
tabStudentImport.reload({
url: ‘’,
data: []
});
layer.alert(msg.Text, { icon: 0, title: “提示” });
}
提交表单之前,我们要获取第一部分form里面的action=“ImportExcel”,然后在控制器里面写ImportExcel的方法,这个方法就是将导入的Excel表格的数据保存到session里面,这是提交数据最重要的一个方法,也是最复杂的一个方法,主要思路:1、获取读取的文件;2、把文件转换为二进制数组;3、二进制数组转成内存流;4、利用NPOI把内存流中的数据读取成Excel。由于时间问题,我就不那么详细的讲解了,在控制器名称括号里,来接收一下,传入的Excel表格的名称,然后我们声明一个returnJson来提示用户。首先用一个try…catch来扑捉错误,首先清空session中原来的数据,然后获取文件后缀,我们有if…else判断上传文件是否为Excel表格,判断的时候,不管是.xls还是大写的.XLS和.xlsx和.XLSX都要判断一下。然后声明一个byte[ ]类型变量fileBytes,将传入的文件转化为二进制的数组传入到fileBytes里面,然后再将二进制数组fileBytes转成内存流,再将内存流转化为工作簿的时候,我们要引入一个插件NPOI,打开我们项目的解决方案资源管理器里面找到引用,如果你们没有NPOI的插件,请找有这个插件的人拷贝一下,具体引用,我就不多讲了。引入完成之后,我们要把内存流转化为工作簿。我们判断一下工作簿里面是否有数据,如果工作簿大于0,说明里面是有数据的,然后查询出学院,专业,年级,班级的信息,用来根据名称获取对应的ID。实例化studentVo对象列表,获取工作簿中的工作表,然后再用if…else判断工作表中是否有数据,if括号里面,用一个PhysicalNumberOfRows获取的是物理行数,也就是不包括那些空行(隔行)的情况。如果PhysicalNumberOfRows大于零,将数据装到DataTable中,再然后获取表头行,获取表格列数,然后用for遍历循环表头行数据,遍历表头行中的每一个单元格,获取表头行各个单元格的数据,将获取到的标题行的数据放到DaraTable中,然后我们再用for遍历循环表格数据,获取行数据,创建DataTable行,在新行添加到DataTable中。声明变量,记录成功和失败数据的条数,遍历循环工作表里面用DataTable定义的函数中各行数据,我用foreach来遍历,在foreach里面实列化studentVo对象,然后用try…catch来扑捉错误,
在try里面我们把学院表、专业表、获取年级ID和名称,根据学院ID以及年级名称获取相应的年级ID、获取班级ID和名称,根据学院ID和专业ID和年级ID以及班级名称获取班级ID。否则就是反方向的判断语句,把对象列表中的数据保存在session中,然后返回数据。来到页面,如果提交表单成功,就启用保存到数据库的按钮,刷新表格,否则就是清空table。刷新表格的时候,要把获取session中的数据,分页并返回页面,具体步骤如下:实列化对象列表;判断session中是否有数据;计算数据总条数;查询要分页的数据;然后实列化,返回实列化声明的函数。这样我们就可以把数据保存到临时表里面了,那要怎样把数据放入到数据库呢?接下来,我们就做导入到数据库的操作。获取导入数据库的按钮,声明一个变量,具体代码如下:
//导入到数据库
function saveImport()
{
var layerIndex = layer.load();
//保存到数据库
$.post(“SaveImport”, function (Msg) {
//关闭加载层
layer.close(layerIndex);
//关闭模态框
$("#modImportExaminee").modal(“hide”);
//输出
layer.alert(Msg, { icon: 0, title: “提示” });
//刷新
searchTabStudent();
});
}
然后保存到数据库,关闭加载层,提示成功还是失败,刷新表格。当然在保存到数据库里面,我们要写一下保存数据库的方法,在上面的SaveImport里,我们要在控制器里写一下它的方法,方法步骤如下:声明几个要记录的变量;实力化对象列表;判断session中是否有数据;判断导入的数据是否与数据库学生表的数据重复,然后返回数据。这样数据就可以导入到数据库里面了。
学习总结:通过这次学习,我学会了如何将Excel里面的数据导入到数据库里面,这次的学习内容有点多,希望各位读者能细心的去阅读,也希望大家能从中获取自己需要解决的方法,最后希望大家学习进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值