作者:坚定的守猴
撰写日期:2019年5月02日
开发软件和关键技术:VS; 程序集的引用
在做项目的过程中,对于数据的处理我们在项目里面无法直接完成。所以为了解决这问题且同时提高效率,我们一般都是从外部导入数据。在外部把数据处理好,就直接把模板和数据同时导入进来。就好比如是Excel表。
Excel表是一张工作表,它有特定的格式。所以我们只能在外面下载一下它的模板,通过正确的路径把它引进项目里面来。通过把这模板的数据先保存在session里面,就对session里面的数据进行分页查询,最后再保存Excel的数据到数据库里面。现在我们就来看一个导入考生信息的例子。
导入Excel表格它有几个步骤,相对来说代码多一点,复杂那么一点点。无论怎么复杂,只要按照步骤来就行了。
首先第一步就是下载Excel模板。下载模板的重要一点就是保证路径正确性。
刚才所说的重要的一点。到这里的话得引进几个程序集的参数:File、Path、FileStream和FileMode。File是提供用于创建、复制、删除、移动和打开文件的静态方法,在这里就判断模板数据是否存在。Path是对包含文件或目录路径信息System.String实例执行操作。这些操作是以跨平台的方式执行的。在这里就是获取文件的名称。而FileStream和FileMode分别是使用指定路径创建模式的初始化和使用操作系统打开文件。所以这大体的思路就是先获取数据的路径,再判断文件模板是否在所创建的文件里面,在里面获取文件模板的名称,获取之后就返回文件的下载时候的名称。最后返回文件名称那里,通过FileStream参数创建新的对象,指定上面filePath获取文件的路径,以文件流的文件类型在浏览器返回上面指定的文件名称。
这个是在浏览器打开获取模板的文件窗口。(结尾再展现一下效果)
下载模板的步骤完成之后,接下来将导入的Excel表格的数据保存到session中
分四个步骤,首先获取读取的文件
在获取数据文件之前,先把session里面ImportExcel残留的文件给移除掉之后,就获取一下文件的后缀,这是为后面判断传过来的文件是否为Excel的文件类型。
第二就是把文件转换为二进制数组
首先声明二进制的数组,把传过来的文件存放到里面。
存放到里面之后就把文件转化为二进制的数组存放到fileBytes
第三步:将二进制数组转成内存流
第四步:利用NPOI把内存流中的数据读取成Excel
在此之前,我们先引用一下这NPOI的方法
把NPOI引用进来的就是为了创建工作簿在下面的工作表里面编辑数据。
现在就将已转成内存流的二进制的数组转化为工作簿
创建工作簿的目的就是将导入进来的学生数据放到里面的工作本里面,这就相当于自动创建一个Excel表格的格式,自动规划好数据在数据表的样式。这样的话就会更方便数据在表里面的分布。
判断工作簿是否有工作表,判断之后就查询一下考生的学院,专业,年级,班级的信息,对与这些查询到的数据就在下面声明一个对象列表,存放到里面。
接下来就获取第一个工作表,在作一个工作表的是否含有数据判断,就将里面的数据装到DataTable,接下来的都是有关于如何构建一个简单的Excel表格数据的格式。创建数据表格规划思路。
上面是构建DataTable里面工作本的格式流程,然后就把里面的新行添加到里面。
接下来就再创建StudentVo对象,把查询到的数据保存到对象列表之后,再保存到Session里面。这保存到Session里面的数据的目的是在弹出来窗口那里,导入数据之后得建一个临时表格,方便查看里面导入进来的数据。
.这些就是保存成功的状态跟踪
这些工作表的数据成功保存到Session里面之后,就得对它进行数据提取,进行分页数据的查询。
从整体上看,这就和Linq查询数据的代码写法类似,都是先声明一个对象列表,然后就对里面的数据进行查询。
到了最后一步就是导入进来的数据保存到数据库里面来
首先开始把导入数据之后的状态写一下
保存成功的话一般都是数据库里面没有的数据内容,而保存失败就是里面有数据是否重复或者查询不了的。
下面就对数据库里面的数据与新导入进来的数据进行判断,看一下是否会有重复,就类似于新增代码的写法
对于这些数据导入数据判断没问题就可以成功的保存到数据库里面去了。
记录导入成功的状态,方便知道数据导入进去之后的情况。
接下来就看一下JS的部分代码
这里是导入的模态框,在导入模板之前,我们对保存数据库的按钮进行禁用,为了就是不出现还未导入模板的情况下而直接保存数据到数据库里面了。还有在打开模态框的时候误触碰其它地方而导致模态框收起来,避免还没有对内容进行处理就出现这种情况,所以就设置了backdrop和keyboard的状态同时为false.
我们现在来看一下保存数据到临时数据表那里的代码
这个和那个表格都是大同小异,只不过一个是临时,一个是长期而已。
基本代码都介绍完毕,下面我们来看一下效果如何
这个是弹出导入模态框的效果
打开导入模态框之后,就点击下载导入模板,在浏览器的左下角显示模板文件的名称。(在不同浏览器的下载模板显示的形式是不一样的)
下载好模板之后,就点击Browse那里打开已下载好的模板,模板里面是有数据的,我们就直接选中相对应的模板,然后就点击下面打开。
打开文件之后就会显示模板表格里面成功匹配的数据,就会在临时表上面显示匹配进来的数据,就保存到Session里面,对于导入进来的数据,就可以在这里一目了然。
匹配成功之后,之前禁用的导入到数据库的按钮就可以重新启用。点击这启用的按钮,就可以把匹配成功的数据保存到数据库里面。
如果数据库里面已经存在的数据,它会把导入进来的数据分两种情况,已经存在的数据就不会再重复保存了,这样就避免数据的重复。
导入Excel表的基本思路就介绍到这里。