loulan-excel-import

EXCEL导入

<dependency>
    <groupId>org.loulan.application</groupId>
    <artifactId>loulan-excel-import</artifactId>
    <version>2.0.0</version>
</dependency>

更新说明

1.0.0

  1. 该版本下的jar包的导入只能值对2007版本下的excel导入,
    也就是后缀为xls的表格进行导入。

1.0.1

  1. 该版本下的jar包配置了2007版本以上的功能导入

2.0.0

  1. 该版本下的jar包对所以类的路径进行了变换,也就是全限定类名发生了改变,
    已经使用1版本的不建议升级到2版本(类路径会发生错误),

jar包说明

一.概述

  excel表格的导入采用了xml描述文件方式的规则导入,要提前按要求写好xml文档,xml文档主
要是写明导入excle数据的规则以及一些校验的规则,最后读取并校验之后返回ExcelData对象的数据
,里面包含校验正确数据和校验错误数据。

三种调用方式
1. 默认工作簿
ExcelImportUtil.readExcel(excelStream, xmlStream);

这个是默认使用第一个工作簿进行读取的。

2. 设置工作簿的名称
ExcelImportUtil.readExcel(excelStream, xmlStream,name);

这个可以设置读取工作簿的名称

2. 设置工作簿的名称
ExcelImportUtil.readExcel(excelStream, xmlStream,num);

这个可以设置读取工作簿索引

二. XML校验规则

  1. 根节点随便命名,一般是excel-description为名

  2. 节点 ,在xml中只能定义一个这样的节点,用来描述excel读取的开始和结束,内部属性有"startRow",表示从第几行开始读取数据;"endFlag"表示读取到哪个字符就表示结束
读取(拥有该结束符的行不算在数据内)。

  3. 节点,也是只能定义一个这样的节点,它没有属性,但是内部包含另外一种
节点,就是,这个节点可以有多个,表示的是单元列对应的字段名,它有2个属性;一个是cellColumn表示对应excel中的列,值一般都是A,B,C,D等;另外一个就是fieldName表示对应的字段名。总结下来就是对应的列字段名是什么。excel读取数据的时会按照这个列和字段名进行读取,不会读取其它列的数据。

  4. 节点,也是有且只能定义一个这样的节点,表示系统校验器有哪些,它没有属性,但是又子节点,这个节点可以又多个,用来写校验器,它的属性又两个。一个是name表示校验器的名字;一个是value表示检验的全限定类名。

  5. 节点,也是有且只能定义一个这样的节点,表示单元格数据校验器集合,它没有属性,但是有子节点,它有一个属性cellname表示的是单元格名称的正则表达式,可以表示一个单元格,也可以用正则表达式来表明一部分单元格。它的下面还有子节点,该节点可以有多个,属性至于一个,是name表示的是系统校验器的名称,表示使用哪些校验器校验这个单元格。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<excel-import-description>
	<!--excel读取开始行和结束标志-->
	<excel-reader startRow="2" endFlag="END"/>

	<!--单元格字段对应-->
	<cell-fields>
		<cell-field cellColumn="A" fieldName="ID"/>
		<cell-field cellColumn="B" fieldName="NAME"/>
		<cell-field cellColumn="C" fieldName="AGE"/>
		<cell-field cellColumn="D" fieldName="ADDRESS"/>
	</cell-fields>
	
	<!-- 校验器定义 -->
	<validators>
		<validator name="validator1" value="org.loulan.application.excel.imports.validate.NotEmptyValidator" />
		<validator name="validator2" value="org.loulan.application.excel.imports.validate.NumberValidator" />
		<validator name="modifier" value="org.loulan.application.excel.test.validate.TestValidaate" />
	</validators>

	<!-- 需要校验的单元格 -->
	<cell-validators>
		<cell-validator cellname="A[0-9]+">
			<validator name="validator1"/>
			<validator name="validator2"/>
		</cell-validator>
		<cell-validator cellname="B2">
			<validator name="validator1"/>
			<validator name="validator2"/>
		</cell-validator>
		<cell-validator cellname="C2">
			<validator name="validator2"/>
		</cell-validator>
		<cell-validator cellname="D[0-9]+">
			<validator name="validator1"/>
			<validator name="modifier"/>
		</cell-validator>
	</cell-validators>


</excel-import-description>
三. 校验器

  我们是可以自己定义校验器的用来校验单元格的数据,校验器必须实现接口ExcelValidator,然后将自己定义的校验器全限定类名写到xml的 系统校验器就可以调用了。

四. 修改器

  修改和校验器是异曲同工的,因为它们传输过来的是对象cellDescription,我们可以在修改器里面修改对象的值,但是不能修改对象

五. 数据结果指示

  ExcelData对象里面有两个属性,这两个属性的类型是一样的,他们存储
的数据分别是校验之后正确的数据和校验之后的错误的数据,数据都是按一行为一个map集
合,然后再存储再list集合中。单元格描述对象CellDescription里面有一个属性
message,如果单元校验错误,错误信息就会写在这个单元格对象的这个属性上面。
还有就是一行中如果有一个数据错误,那么这行数据都会被放入错误数据部分。
当然错误分两种,一种是数据校验错误,一种是系统错误(就是校验器的异常引起的)。

测试
package org.loulan.application.excel.test;

import org.junit.Test;
import org.loulan.application.excel.imports.bean.ExcelData;
import org.loulan.application.excel.imports.excelInterface.ExcelImportUtil;
import org.springframework.util.ResourceUtils;

import java.io.FileInputStream;
import java.io.IOException;

/*********************************************************
 ** Description: excel导入工具测试
 ** <br><br>
 ** Date: Created in 2020/3/2  10:58
 ** @author 楼兰
 ** @version 0.0.0
 *********************************************************/
public class ExcelImportUtilTest {


    @Test
    public void test () throws IOException {
        FileInputStream xmlStream = new FileInputStream(ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "test.xml"));
        FileInputStream excelStream = new FileInputStream(ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "test.xlsx"));

        ExcelData excelData = ExcelImportUtil.readExcel(excelStream, xmlStream);
        System.out.println("结束");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值