功能强大、使用方便的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)字段作为判断是否重复,一般情况下配置一个字段即可。
第二部配置2个hibernte
第一个bean是数据库操作类把sessionFactory配进去
第二个是excel导入类要吧第一个bean配置进去,"excelImport"是默认名字也可以不使用这个名字
第三部调用:
ExcelUtils里有很多重载方法选择一个最合适你的。第一个参数要导入excel的文件流,第二个参数文件名,第三个参数描述xml文件流,第四个excel导入类,第五个是自定义操作接口。这个接口有2个方法,第一个beforeDB可以对excel中的数据自定义验证,参数是json对象。第二个afterDB可以插入一些excel中没有的数据,参数是实际导入的对象。也可以对关联表的id验证,beforedb是没有id信息的。
工具jar包下载地址
工具jar包2.0下载地址(修改部分BUG,增加一些功能)
测试项目下载地址
这个工具功能非常强大:
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,增加一些功能)
测试项目下载地址
相关文章推荐
- 使用Java实现Excel导入功能
- java使用poi导入excel
- 使用SQL Server导入数据功能导入Excel之数字编号问题
- Java excel 导入功能
- java实现Excel导入功能代码
- JAVA使用HSSFWorkbook生成导入Excel 的用法
- JAR 文件格式的强大功能(java中jar工具的使用)
- Java中使用poi导入、导出Excel
- 使用poi实现Excel导入功能,数据库基于oracle(下)
- EXCEL导入功能java代码实现
- java使用POI批量导入excel数据的方法
- 使用Java POI导入导出Excel数据
- JAR 文件格式的强大功能(java中jar工具的使用)
- java 实现excel中的数据导入到数据库的功能
- 有史以来功能最全,使用最简单的excel导入/导出工具
- Java Excel导入导出,基于XML和Easy-excel使用
- Java中使用poi导入、导出Excel
- Java-Maven-POI 简单导入导出Excel通用工具,默认使用基于poi实现
- Java 使用poi导入excel,结合xml文件进行数据验证的例子
- JAVA使用HSSFWorkbook生成导入Excel 的用法