java实现excel表格导入数据库表
导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程
一、上传excel
前端jsp页面,我的是index.jsp
在页面中我自己加入了一个下载上传文件的功能,其中超链接就是下载
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <script type="text/javascript" src="jquery/1.7.2/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="jquery/jquery.form.js"></script> <script type="text/javascript"> function test1(){ var form = new FormData(document.getElementById("uploadForm")); $.ajax({ contentType:"multipart/form-data", url:"servlet/UploadHandleServlet", type:"post", async:false, data:form, dataType:"json", processData: false, // 告诉jQuery不要去处理发送的数据 contentType: false, // 告诉jQuery不要去设置Content-Type请求头 success:function(data){ var result=eval(data); var filePath=result[0].filePath; //alert(filePath); var fileName = result[0].imageName; $("#download").attr("href","servlet/DownLoadServlet?filePath="+filePath); document.getElementById("download").innerHTML = fileName; //上传文件后得到路径,然后处理数据插入数据库表中 importExcel(filePath); } }); } function importExcel(filePath){ $.ajax({ url:"${pageContext.request.contextPath}/user/insertUserByExcelPath", type:"post", data:{"filePath":filePath}, success:function(data){ } }); } </script> <body> 导入excel表格 <form id="uploadForm" action="" method="post" enctype="multipart/form-data"> <table> <tr> <td>上传文件:</td> <td> <input type="file" name="fileName" id="fileName"/> </td> </tr> </table> </form> <button id="uploadFile" onclick="test1();">确定</button> <!-- servlet/DownLoadServlet --> 上传的文件<a id="download" href=""></a> </body> </html>
后端的上传的servlet,其中需要commons-fileupload-1.2.1.jar的支持,然后我的保存路径savePath是自己写的一个配置文件来的,这里可以写上自己的上传文件所保存的路径就行,返回的是一个json,包括文件路径还有文件名
二、处理excel表格并得到含有Javabean的list
在用ajax调用servlet上传文件后得到路径和文件名,然后进行excel数据处理,在前端的页面上调用importExcel()的js函数,传入刚刚得到的文件路径
我这里用的是ssm框架中的controller(我自己也学习一下),这里也可以用servlet,或者Struts等。能访问到后端服务就行。
这里是controller中的代码,主要数据处理在Excel2Bean.getBeanByExcelPath(filePath, User.class)这个方法中
这里就说说Excel2Bean.getBeanByExcelPath(filePath, User.class)这个方法
从excel表格中获取数据然后转换成一个javaBean的list集合,代码中操作excel表格需要用到的jar poi-ooxml-3.9-20121203.jar,poi-3.9-20121203.jar,poi-ooxml-schemas-3.9-20121203.jar,为什么要用到这些jar,因为在有些之前的版本的poi中可能对word的版本不能兼容,网上具体有说到这个。最好是用org.apache.poi.ss.usermodel.Workbook这个来操作excel,poi各种版本官网下载可以参考微博https://mp.csdn.net/postedit/83620739。对于getBeanByExcelPath这个方法使用到了泛型,也使用到了一点点的反射的东西,获取一个类的属性,并给属性赋值。代码中有方法测试这个获取Javabean的属性并赋值的方法。这个方法也是为了能更通用一点,适用于更多的javabean,更多的表。当然excel的表头就要用到Javabean中的属性名称了。如果对泛型不是很了解的可以学习一下,当然也可以先看里面的readExcel(filePath)这个方法,是一个固定的Javabean对象
代码如下
三、插入数据库
得到excel转换成Javabean的list对象后然后插入到数据库中。我这里用的是ssm里面的一些操作,我自己可能都解释不清楚。反正得到数据,然后往数据库插入数据这个操作也可以用其他方式的,框架也好,jdbc连接数据库直接去执行sql也好,都OK。
最后贴一下下载上传的文件的servlet代码
还有User.java这个javabean、