之前一直为excel的导入导出烦恼,每写一次都感觉是“重复造轮子”,代码很繁琐,可移植性特别差。终于下决心写一个可重用性很高的组件,专门解决“重复造轮子”的问题。
xml配置文件名称:excelmodemappingl.xml
内容(示例):
<?xml version="1.0" encoding="utf-8" ?>
<models>
<map>
<entry excel_key="永久" bean_value="c"></entry>
<entry excel_key="长期1" bean_value="send_1"></entry>
<entry excel_key="长期2" bean_value="send_2"></entry>
<entry excel_key="长期3" bean_value="send_3"></entry>
<entry excel_key="长期4" bean_value="send_4"></entry>
<entry excel_key="长期5" bean_value="send_5"></entry>
</map>
</property>
<property name="senddate" column="3" exceltitlename="时间" datatype="date"format="yyyy年mm月dd日 hh:mm:ss" maxlength="15" default="10"/>
</model>
</models>
这个文件有两个作用,(1)用于有excel文件转化为beans;(2)用于把beans转化为excel。
<!--[if !supportlists]-->(1) <!--[endif]--> default只有在excel转为java beans才有效;在java beans转化为excel时无效。
若excel中的单元格中无内容,则采用default指定的值;
<!--[if !supportlists]-->(2) <!--[endif]-->column只有在从java bean导出excel时才有效,表示excel中列(表头)的顺序,取值范围为[1,2,3……];
<!--[if !supportlists]-->(3) <!--[endif]-->若datatype为date,则多出一个属性format,例如format=”yyyy-mm-dd”;导入导出excel时都有效
<!--[if !supportlists]-->(4) <!--[endif]-->若isconvertable的值为true,则有map节点,否则则不会读取xml 配置文件中的map节点;
<!--[if !supportlists]-->(5) <!--[endif]-->对map说明:excel_key 表示excel单元格中的值,而bean_value则表示java bean中对应属性的值。
<!--[if !supportlists]-->(6) <!--[endif]-->datatype只允许有两种取值[date, string];
<!--[if !supportlists]-->(7) <!--[endif]-->此配置文件采用utf-8编码;
对xml配置文件 各标签的说明
标签名称
含义
示例
model
定义一个java bean与excel的映射(mapping)
class
model的属性,必须的。指定java bean的类路径
例如com.kunlunsoft.model.student
property
java bean中的成员变量
name
property标签的属性,指定java bean的成员变量名称
exceltitlename
excel文件中表头的名称,与name是一一映射的。
datatype
数据类型,分为string 和date,目前就这两种,int,float统一归于string类型
format
如果类型是date,则可以指定该属性,用于日期的格式化
format="yyyy年mm月dd日hh:mm:ss"
maxlength
预留的,目前没有使用
default
默认值。excel文件转化为java bean时,excel单元格为空,则设置java bean对应属性值为该默认值
isconvertable
是否需要转化。比如java bean中的值为[yes,no],而对应的excel中的值为[是,否],这就需要使用一个map来进行映射
<map><entry excel_key="是" bean_value="yes"></entry>
<entry excel_key="否" bean_value="no"></entry></map>
<!--[if !supportannotations]-->
<!--[endif]-->
详见附件。