您的位置:首页 > 编程语言 > Java开发

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

2013-07-11 19:42 267 查看
目前的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,增加一些功能)

测试项目下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: