00:02
各位大家好,刚才内容中呢,给大家演示了easy Excel,如何实现对Excel表格的读和写的操作,那咱们下面呢,在我们的项目中,咱实际用这个技术来实现我们的具体功能,我们要实现的功能就是对数据字典进行读还有写的操作。那咱们首先呢,先做一个写的操作,也就是说我们现在把这些数据给他写到一个Excel表中去,或者说呢,就是把我们数据库表中的数据最终给它写到一个Excel表中去,咱又来做这么一个写操作,而这个写操作那我们该怎么做呢?给各位做个分析,首先第一个大家看页面中,在咱们的页面中咱是不是要加个按钮。按钮,但是按钮呢,咱不能要写,是不是一个导出操作,就是把这数据导出到一个Excel表格中去,另外一个读读是不是就是一个导入功能,所以咱们现在。
01:05
先来写这个导入导出的接口部分,然后最后再来整合前端部分,那咱们下面就来编写这个接口,先来写这个导出的这个接口,那我们看怎么来做,首先啊,咱们现在来到我们这个代码中,我把这个CTRL打开,然后在里边我们先写里边的第一个接口,就是它的导出的接口,我写一下。导出数据字典的。这么一个接口,然后这个接口在里边我写一下,首先我写一个提交方式,咱就来一个get提交,给它起个名字,我叫这个export。然后下面加上方法,我们是这个塔。Result。然后加上这个方法叫port。这个。
02:03
在里边我们可以串个参数,因为咱们做导出其实相当于就是要做一个下载一个操作,当然这个过程中你可以把内容直接写到某一个指定文件中,当然咱们从用户体验角度考虑,可以让用户自己选择路径和名字,所以咱们在里边给它加个参数,就是这个响应的response参数,方便咱们做下载操作,那我来串参数HTP。Response。我们来传入这个参数,为了一会做下载,所以这个是我们写的一个基本结构,然后这个写完之后,咱们下面就可以调用思维中方法查出数据,最终通过Excel给他做导出,那我现在在里边呢,我就直接调一下service里边这个方法,那我们调一下这个方法,起名就叫port这个。
03:02
D空。在里边传入这个response,然后最终我就给它直接返回一个结果,咱就来个result.ok。这个我们做一返回,然后这个写完之后,下面咱们开始写这个service,在service里边首先把这方法我们先做创建,然后来到service的实现类中,在实验类中我们来实现这个方法,然后方法里边刚才我提到,因为这个导出过程是不是就是一个下载过程,所以下载各位应该知道,在response里面,咱们是不是能设置一些相关的一些信息啊,就是一些头信息,那这部分我就不再敲一遍了,给各位直接布置一下,因为我们应该是基础阶段去这个东西就是一个最简单的下载操作。那我现在把这部分给各位来直接复制过来,咱们来看一下啊,这一部分到底是什么意思。
04:01
然后大家看啊。首先呢,在里边的第一行大家看叫response.set content type是不是你的content类型啊,然后这个类型大家看是什么。是不是Excel类型,第二个设你的编码,当然这里边可以来一个这个文件名字,比如说这个名字我们给他就随便起一个名字啊,当然你可以有中文,中文你可以加个编码,我就直接来一个英文了,这个名字就叫地口。然后下面呢,咱们给它设里边这个头信息,就是content disposition,这头信息的含义是什么,让我这个操作以下载方式打开,呃,它是问的file name等于咱们的D点叉LSX,这样的话咱们先设置我的下载的一些相关内容。写下设置下载到信息,然后设置下载信息之后,下面咱们可以怎么做,是不是要查数据库,把数据查出来,然后最终用easy Excel写到里面去,那咱下面来做第二步,我写一下。
05:08
咱们就可以查询数据库,就是查询你所有那个就是关于数据点信息,那我们来查一下,因为现在在service里边,Service中呢,咱们叫map,那我就写一个base map里面那方法叫select list,因为咱查全部,我就来一个钠,最终它是返回一个利集合,就这个第口利。然后返回绿色集合之后,咱们下面就把它写到引cel中,刚才咱们说过写操作就是作为是否记得啊,第一步引入依赖在一过了,第二步是不写实体内有里边加你的注解设置表头等信息,所以这里边我们可以建个实体类,但是实体类我在model中已经提前创建过了,我们来看一下里边这个实体类啊,比如说我们找到。
06:00
应该是在VO这里边有一个叫D口这个VO,然后在里边有我们的实体类,这跟我们对应,包括你看里面有这个。1EXCEL property,包括有它的表头,还有它对应这个就是相关的力,所以现在这个已经存在了,然后这个存在之后,咱们下面做的事情是什么呢?大家注意我们是不是可以调用这个。方法进行这个。写的操作用,也就是调这个easy Excel这个方法叫right,然后right方法中大家看它的参数,再看什么参数。咱们测试中用的是路径,现在什么先用这个流啊,所以里边第一个我传个流就是response.get什么output stream,第二个实体类的那个就是class,我们就写一个叫。D口。这个VO。点class,然后咱们再点上一个叫she,我可以给它起个名字,比如这个名字我就叫。
07:06
啊,就叫它了啊,然后再来一个这个点上一个叫do right,然后在do right里边,你看传什么,是不是传个list集合呀,但是这个list集合咱不能传它吧,为什么不能传它嘛,因为咱事一类的对应关系中,这里边是不是要跟我这个D和VO对应上了,所以咱们现在要给他做个操作。做过什么操作呢?我写一下,就是把里面这个D。给它转换成是不是这个D口VO这个对象,所以咱们要做这个事情。那大家说怎么做?首先第一个你明确啊,这里边传的肯定也是一个绿色集合,只是说咱目前不传的原因是因为这历次集合目前是D个对象,咱要变成D口VO对象才能传进去,所以咱们需要做这个处理,那大家说这步怎么做?你说该怎么实现?
08:00
应该不是很复杂啊,咱把它是不是要变利,变利之后得到每个地对象。然后把每颗D个对象中的内容给它复制到D的V物中,是不是就可以了,就这过程,那我下面来写一下啊,首先在里边第一部分,比如说我先定义一个例子集合,我就把这个那就直接给他拿过来啊。这复制一下,我定一个第次集合,比如我就扭上一个,我这。然后定式定义例子集合之后,咱们把这个D和例子的给它做一个变力,或者说做一个循环变历,那我就直接给它。便利下,咱们写一个增强后循环,这个叫D。D口list,然后遍历之后得到里边的每个D口,咱们把每个地是不给它复制到这个D这个view里面去了,所以我在里边就new一个D个VO。对象,然后做个复制,复制的话呢,咱可以用个工具类,这个BU里边这个叫copy properties,然后在里边呢,把咱们D中的内容复制到这个DVO中去,咱们可以做这个事情,这个代码什么意思呢?它就好比说我写一个原生代码,咱把这D里边的值给他。
09:22
Set出来,然后再塞到这里面去。Set ID,然后你把这个给他直接拿过来,就相当于咱每次都这么做,只是这个代码在里边有BU,里边这方法已经帮咱封装了,所以咱可以直接做到,然后做到之后咱把这个值最终就放到咱们的例子里面去,里边放这个DVO,然后这个反应之后咱再把这个d VO list再传出来,这样的话就正确了。这里边有一层,咱可以给它加上一个try catch捕获一下,比如给他来一个。
10:03
所以咱们到这一步呢,我们就完成了向Excel中进行写操作代码,这个代码接口部分我们就写完了。所大家找这过程,然后我再说一遍啊,最后咱再测试我们的做法,就是首先写CTR了,里边传个response,为了咱一块儿做下载方便,然后咱们调service中的方法,在service里边呢,首先设置下载信息,让我们的操作以下载方式打开,然后设置之后第二部分查询出我们需要的数据,因为这个数据呢,历史结构中是D对象,然后给它变成D这个view对象,所以咱们做一个转换,变完之后调1EXCEL中的right方法。把它就写到咱们这个文件中去,这样的话,咱们最终就完成这个用e z Excel进行数据字典导出的这个接口,咱们把接口我们现在就完成了,所以各位把这过程能给他做到。
11:05
然后接口写完之后呢,咱下面做的是把这前端整合一下,那我就来把前端咱们快速整合一下,这前端应该很简单了,那我们来写一下啊,首先第一个前端嘛,大家看这里边咱是不是要加个按钮,就是导出数据,那我现在来到我这个数据字典这个页面中,咱找一下啊,应该就是在我这个。例子中,然后我现在在list最上面给它加上一个这个E8寸这按钮,按钮我就从里边直接复制了,就这按钮,我把这按钮给他就直接拿过来。然后给它放到我们这个页面中。这是我们加的一个基本一个按钮里边这些啊,咱们加上一个空格给他,不让他报错。这样的话我们就加上了,然后加上按钮之后,现在咱要实现,当我一点按钮就实现导出操作,所以我现在大家看啊,我在按钮里边是不是给它绑定了一个事件呀,叫is put date,那咱们下面把这个方法我在下面来做定义,就这个is put date我写到下边这里边。
12:21
价格注释。导出数据字典的数据。啊,导出注意字典,然后里边的方法叫export data,在这个方法中大家注意啊,它的做法直接去调咱的接口就可以了,因为大家注意我这过程中应该说不需要反什么数据,他只需要去调咱的接口应该就可以了,所以咱们现在让他就直接做个调用就可以了,那怎么调用呢?首先啊,我先改个地方。刚才我提到这个不需要反映数据,所以咱就没必要写这个伪造的了。我加个word是不是就可以了,直接让他下载导出就可以了,然后咱们现在在我这个方法中直接去调用。
13:06
咱们那个。导出的接口就足够了,那我直接就调一下啊,怎么调用呢?在JS里边有一个最简单的方法,咱加一个叫window。点location。点HREF后面加上咱的路径可以了,Window可以省略,然后这个路径你看就是我们那个完整的路径,我把路径在里边,我就直接复制一下,应该就是这么一个路径。我把它就直接拿过来。咱看一下别写错啊,Local house8202,然后叫admin看一下路径,Admin same Di isport date给它改一下。D is put it,所以这样的话呢,我们现在把这前端就完成了整合,包括接口部分我们也写完了,然后写完之后,现在我把这服务咱们重新启动一下,然后做一个最终的测试,就看一下咱们这个导出功能最终能不能实现出来。
14:12
如果说效果正确,他也把数据给它导出到一个Excel表格中去,并且在里边我们看到最终的效果,那咱们做一个最终测试。首先我来到页面中大家看啊,现在在我页面中是不是有一个导出按钮,当我点它是不是应该能实现反射效果,那咱下面给他就点一下,咱们看一下最终是什么样的。咱们一点。大家看是不是弹了一个框了,说让咱们下载,比如现在我保存,保存到我的桌面,现在就完成了,然后咱们在桌面找到文件是不是D这个文件,我把它打开,大家看里边是不是由我们下载之后就是数据字典,所有内容是不是都存在了,所以这样的话,咱们把这个导出就完成了。
15:03
但是完成之后呢,大家发现啊,这里边有一个小问题,你发现啊,我刚才导出之后,在我这个浏览器中,它是不是没有弹出框,是不是到了这个页面,而我之前那个就是系统是不是就不存在了,所以我现在给他稍微改进一下,怎么改进,你看啊,我想实现我点导出,让它打开一个新的标签页,在这里边做下载,而咱们给他稍微改进一下,这么做虽然能实现,但是用户体验并不好,因为我浏览器它没有弹框,而是直接在里边直接给你打开了,那咱下面给它快速改一下啊,应该也很简单,怎么改,比如我这么来做,现在大家看啊,我这里边呢是一个按钮。比如我现在在按钮位置呢,我给它加上一个A标签,就是一个超链接标签。加上这个,然后把这段内容给他就拿进来。放到这里面。
16:00
然后把这个事件给它去掉,我在这个A标签上边加上一个这个h ref,然后把这个路径咱给它直接就复制过来,直接写到这里边去,这是我们那个路径。写完之后在A标间中一个属性叫这个他记。Target就是一个目标。然后它给它里边的有个值叫下划线兰。它表示在一个新的标签页打开,咱给它稍微改进一下,虽然说咱们重点是开发接口部分,但是这个页面给它做的稍微友好一点,然后这个改之后,比如说我们再试一下我刷新,现在我点导出是不是打一个新的表页,然后在里边保存到我们的桌面给它替换,这样的话是不是就是更友好一点。啊,所以咱们现在把这个我们就完成了啊,就关于这么一个操作。这是我们写到的这么一个功能。就是关于。
17:02
数据字典下载功能的一个最终的实现。所以大家把这功能按照过程能给他最终做到。
我来说两句