Skip to content

简单好用的、实现了「类」&&「实例集」同Excel映射的Poi组件

Notifications You must be signed in to change notification settings

samuerio/component-poi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Poi-Component

简单好用的、实现了「类」&&「实例集」同Excel映射的Poi组件

Features

  • 导入Excel的校验
  • 提供导入&导出值的翻译
  • 自定义Excel表头和类的映射顺序

Quick Start

1.在输出Excel的类中进行配置

以字段标注的方式提供相关Excel的配置:

ExcelMapping

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelMapping {
	
	
	/**
	 * 字段描述名
	 * @return
	 */
	public String desc();
	
	/**
	 * 字段输出在Excel中排序号
	 * @return
	 */
	public int index();
	
}

配置字段在Excel中显示&位置的信息映射关系(index从0开始)。注意:对于没有配置映射关系的字段,不会输出到Excel中。

eg.

/**
	 * 联系人名
	 */
	
	@ValidationRule (isRequire=true)
	@ExcelMapping (desc="姓名",index=0)
	private String lianxirenming  = "" ;

这个字段输出到Excel时,显示为“姓名”,并且位于第一列。

ValidationRule

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ValidationRule {
	
	/**
	 * 是否必填
	 * @return
	 */
	public boolean isRequire() default false;

	/**
	 * 校验规则
	 * @return
	 */
	public ValidationType validationType() default ValidationType.None;
	
}

提供Excel导入时,Bean对象字段值的校验规则

eg.

/**
	 * 电子邮箱
	 */
	@ValidationRule (validationType = ValidationType.Email,isRequire = true)
	@ExcelMapping (desc="电子邮箱",index=3)
	private String dianziyouxiang  = "" ;

导入Excel时,电子邮箱值被要求为必填,并且需要进行Email校验。

ValueTranslator

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ValueTranslator {

	/**
	 * 实现ITranslator接口的类的名称
	 * @return
	 */
	String implClassName();

}

允许自定义字段的翻译工具类(需要实现ITranslator接口)

eg.

	@ValueTranslator ( implClassName = "com.issun.component.hssfworkbook.SexTranslator" )
	@ExcelMapping (index=0,desc="性别")
	SexType sexType;
/**
 *  性别翻译工具
 */
public class SexTranslator implements ITranslator {

	private static final Object MAN_DESC = "男";
	private static final Object WOMAN_DESC = "女";
	

	@Override
	public Object getTransValue(Object value, ExcelModeType hssfModeType) {
		
		Object transformValue = null;
		
		switch(hssfModeType){
			case IMPORT:
				transformValue = getImportTransVal(value);
				break;	
			case EXPORT:
				transformValue = getExportTransVal(value);
				break;
			default:
				break;
		}
		
		return transformValue;
	}

	private Object getExportTransVal(Object value) {
		
		if(((Integer)value).intValue() == SexType.MAN.getType()){
			return MAN_DESC;
		}else if(((Integer)value).intValue() == SexType.MAN.getType()){
			return WOMAN_DESC;
		}
		return null;
	}

	private Object getImportTransVal(Object value) {
		Object transformValue = null;
		String sexDesc = (String)value;
		
		if(MAN_DESC.equals(sexDesc)){
			transformValue = SexType.MAN;
		}
		
		if(WOMAN_DESC.equals(sexDesc)){
			transformValue = SexType.WOMAN;
		}
		
		return transformValue;
	}
/**
 * 性别枚举
 */
public enum SexType {
	
	MAN(0),WOMAN(1);
	
	private int type;
	
	SexType(int type){
		this.type = type;
	}
	
	public int getType(){
		return this.type;
	}
	
}

以上是自定义一个字段值进行性别翻译实现例子

2.对外提供使用的API

HSSFWorkbookEngine是对外提供使用的Excel工具类,包含如下工具方法:

导出

/**
	 * 将类的字段描述打印为Excel表头.
	 * @param beanClass 类的字节码
	 * @return HSSFWorkbook Excel的Java抽象
	 */
	public static HSSFWorkbook printHeader(Class<?> beanClass)
/**
	 * 打印类的Excel表头.
	 * @param beanClass 类的字节码
	 * @param hSSFWorkbook Excel的Java抽象
	 * @param sheetIndex 页签序列{从0开始}
	 * @param headerIndex 打印的表头的序列{从0开始}
	 * @return HSSFWorkbook 打印后的Excel对象
	 */
	public static HSSFWorkbook printHeader(Class<?> beanClass,HSSFWorkbook hSSFWorkbook,
			int sheetIndex,int headerIndex)
/**
	 * 打印Excel内容
	 * @param beanClass 类的字节码
	 * @param beanList bean对象列表
	 * @param hSSFWorkbook Excel对象
	 * @param sheetIndex 页签序列(从0开始)
	 * @param bodyIndex 内容开始的行号
	 * @return HSSFWorkbook 打印后的Excel对象
	 */
	public static HSSFWorkbook printBody(Class<?> beanClass,List<Object> beanList,HSSFWorkbook hSSFWorkbook,
			int sheetIndex,int bodyIndex)

导入

/**
	 * 解析Excel内容
	 * @param beanClass 类字节码
	 * @param hssfWorkbook Excel的Java抽象
	 * @param sheetIndex 页签序列{从0开始}
	 * @param bodyIndex 需要解析的内容序号{从0开始}
	 * @param headerIndex 打印的表头的序列{从0开始}
	 * @return BeanProcesser Excel内容的预处理对象
	 */
	public static PreparedBean parseBody(Class<?> beanClass,HSSFWorkbook hssfWorkbook,
			int sheetIndex,int bodyIndex,int headerIndex)

对于导入解析得到的PreparedBean对象可以通过PrepareBeanUtil的executeValidate/executeTransform方法分别获取到校验结果/类实例集合

About

简单好用的、实现了「类」&&「实例集」同Excel映射的Poi组件

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages