功能强大、使用方便的java导入excel

来源:互联网 发布:网络兼职图片 编辑:程序博客网 时间:2024/05/29 00:32

目前的excel导入开发工作量非常大。主要是写一些字段验证,还有关联表验证。不仅工作量大而且效率低,不好扩展。于是我写了下面的工具只需要写一个xml描述文件哦

这个工具功能非常强大:

1,开发工作量小。

2,使用方便

3,是否更新,是否关联表级联插入

4,扩展方便excel变动直接修改xml文档即可

5,效率高

6,验证多

使用到的技术包括:

1,java

2,spring

3,hibernate

4,json

5,xml

6,poi

下面介绍如何使用

第一步写描述文件:

描述文件如下:

根元素:描述excel对应的导入类(class),有相同记录是否更新(upate),关联表没记录是否级联插入(cascade)。为了安全建议不要更新和级联插入

子元素:跟元素下只有一种子元素column,这个元素师描述excel字段列的。顺序要与excel吻合。该元素中的属性是对字段的验证。验证内容一目了然最大长度(maxLengt),必填(required)等。  还有唯一(unique)字段作为判断是否重复,一般情况下配置一个字段即可。

<?xml version="1.0" encoding="UTF-8"?><excel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="excel2db.xsd"sheetIndex="0" startRowIndex="1" class="model.Postage" cascade="true" update="true"><column name="spareCenter.spareCenterName" maxLength="20" required="true"/><column name="spareCenter.address"  maxLength="200"/> <column name="spareCenter.leader.name"  maxLength="200"/> <column name="spareCenter.leader.dept.name"  maxLength="200"/> <column name="postTime" format="yyyy-MM-dd HH:mm:ss"/> <column name="postNum" maxLength="20" digits="true" ><check name="number" errMsg="邮寄费用必须为小数哦!"></check></column><column name="postWeight" maxLength="20"><check name="number"></check></column><column name="postage" maxLength="20" required="true"><check name="number"></check></column><column name="insurance" maxLength="20"><check name="number"></check></column><column name="packingfee" maxLength="20"><check name="number"></check></column><column name="aimplace" maxLength="20" required="true"/><column name="placeDescription" maxLength="20" required="true"/><column name="emsCode" maxLength="20" required="true" unique="true"/><column name="remark" maxLength="200" /></excel>

第二部配置2个hibernte

第一个bean是数据库操作类把sessionFactory配进去

第二个是excel导入类要吧第一个bean配置进去,"excelImport"是默认名字也可以不使用这个名字

    <bean id="commonService"class="excel2db.service.spring.CommonServiceSpringImpl"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="excelImport"class="excel2db.util.excel.ExcelImport"><property name="commonService" ref="commonService" /></bean>


第三部调用:

ExcelUtils里有很多重载方法选择一个最合适你的。第一个参数要导入excel的文件流,第二个参数文件名,第三个参数描述xml文件流,第四个excel导入类,第五个是自定义操作接口。这个接口有2个方法,第一个beforeDB可以对excel中的数据自定义验证,参数是json对象。第二个afterDB可以插入一些excel中没有的数据,参数是实际导入的对象。也可以对关联表的id验证,beforedb是没有id信息的。

Result result = ExcelUtils.excel2DB(ClassLoader.getSystemResourceAsStream("Postage.xlsx"), fileName,ClassLoader.getSystemResourceAsStream("postage.xml"),excelImport,new Excel2DB() {public String validateBeforeDB(JSONObject obj) {//可以写一些其他验证String ems = obj.getString("emsCode");if(!ems.matches("\\w+")){return "$emsCode "+"格式不正确!";}return Excel2DB.SUCCESS;}public String validateAfterDB(Object obj) {//可以添加一些excel里没有的数据,也可以做一些其他验证,对象里已经包含Id;Postage postage = (Postage) obj;if(postage.getPostId()!=null){//未修改的信息不希望丢失Postage db = service.findObjectById(Postage.class,postage.getPostId());postage.setCreatePerson(db.getCreatePerson());postage.setCreateTime(db.getCreateTime());postage.setModifyTime(new Date());postage.setModifyPerson("damengge");}else{postage.setCreateTime(new Date());postage.setCreatePerson("damengge");}return Excel2DB.SUCCESS;}});

工具jar包下载地址

工具jar包2.0下载地址(修改部分BUG,增加一些功能)

测试项目下载地址

原创粉丝点击