Excel表格 导入到数据库

开发工具与关键技术:Visual Studio 2015
作者:徐晶旗
撰写时间:2019年 5月 28日

Excel表格通常是作为办公软件,但是我们无法保证它的安全性,所以把它导入到数据库能增强它的安全性。下面就来操作一下导入到数据库的过程。
首先要到项目中引用一个NPOI的插件

  1. 到页面中写一个点击事件,触发按钮,弹出一个导入数据的模态框。
  2. 然后重置表单,调用resetForm这个方法
  3. 再对弹出的模态框的数据表进行清空数据的操作,
  4. 然后弹出模态框
function openImportExcel()
        {
                     $("#formImportExcel").resetForm();
                               
                     tabStudentImport = layuiTable.reload('tabStudentImport', {
                url: '',
                data: []
            });
  $("#modImportExaminee").modal("show");
             }

接下来通过表单选择这里面的数据表,再选择要上传的数据类型, 选择文件,把它显示到临时表中。下面到input标签中加了”accept”属性,在后面加上文件类型的后缀来限制只能上传的文件类型。
注: “accept”属性只能与 配合使用。它规定能够通过文件上传进行提交的文件类型

<input type="file" class="custom-file-input" name="file" accept=".xls" onchange="upExcel()" id="fileUploadExecl" lang="zh-cn" />
<label class="custom-file-label" for="fileUploadExecl">选择xls文件</label>

然后写一个下载模板的方法,再用window.open打开一个新的窗口,并在窗口中装载指定URL地址的路径,就是请求控制器的方法。

function downImportTemplate()
        {
            window.open("DownImportTemplate");
        }

然后就要回到控制器写一下下载模板的方法,把要导入的模板存放在一个文件夹中,再获取这个模板的路径,然后判断模板是否存在,如果存在,就获取文件名称,把这个Excel的文件名和后缀名获取到,再返回到文件中打开,然后做下载的操作,如果不存在,则做相应的提示。

public ActionResult DownImportTemplate()
        {
            string filePath = Server.MapPath("~/Document/Template/考生信息导入模板.xls")    
            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("模板文件不存在,请联系系统运维人员。");
            }
        }

然后上传Excel文件,保存到临时表,写一个改变事件,一旦选择文件,就会触发它的改变事件,然后调用到这个改变事件的方法,然后打开layer加载层,提交表单。然后进行表格刷新,清空table。

再到控制器中将导入的Excel表格的数据保存到session,直接传过来的Excel表格是不能在这里直接进行处理的,所以获取到Excel表格之后需要先把它先转换成一个二进制的数据,然后把它转换成内存流

下面做一些导入到数据库中的思路:
(1)判断Excel类型是不是: .xls
一、获取读取的文件;
二、把文件转换为二进制数组;
三、二进制数组转成内存流;
四、利用NPOI把内存流中的数据读取成工作簿Excel ,清空session中原来的数据
(2)判断工作簿是否中有工作表
(3)判断工作表有是否数据
(4)数据准确性(学院 专业 年级 班级 表跟表之间的关系)遍历datatable中的数据
(5)然后保存数据,再判断要保存的数据是否为空,判断导入的数据中是否已经有存在于数据库的数据。
(6)最后保存到数据库。