在最近做的项目中,要实现一个导入导出的功能,很高兴,组长将这个任务交给了我,下面我就来介绍一下,我们这个系统的导入导出的功能实现。
本系统的导入导出功能实现分为两个步骤:Excel配置,具体的导入导出功能实现。
一、Excel配置
主要功能:
Excel配置是一个配置需要导入的Excel表格字段的功能,用来设置字段的数据类型,是否显示,以及是否导入。
1、 需要导入的Excel表格要根据这个配置进行字段个数的控制(不显示的不用包含在Excel表中)
2、 后台导入根据是否显示,是否导入,以及是否关联主键来进行导入功能。(未显示的字段的数据类型都有各自相对应的数据类型),后台代码中会根据这些独特的数据类型(例如,addtime,relation,reporter,del,pkey)来进行设置。不需要在Excel中填写。
(1) 树形目录配置
(2) 基本信息
1、 基本信息是保存在SYS_EXCEL_REF_TYPE中,主要是记录基本信息中的代码,名称,pid,is_table等。Is_table表示树的节点是否为配置的表,并根据is_table的值来判断树形结构的右键菜单中是可以(新建分组,新建表)。
2、 代码下拉框中绑定的表是用sql=”select lower(table_name) as id,table_name as text from tabs”来获取加载的。
3、 字段信息(点击自动获取字段,我们就可以获取此表的所有字段,完成后会将每个字段的信息保存到SYS_EXCEL_REF_INFO表中)
关键代码:(t_table为操作的表名,id :SYS_EXCEL_REF_TYPE中对应数据表的id)
public void updateFieldsFromCols(String t_table,String id){
List<Map>tabcols=this.findTabCols(t_table); // 从数据库中获取每个字段的code,data_type,data_length,comments.
List<ExcelInfo>tabfields = this.findTableFields(id);//去SYS_EXCEL_REF_INFO表查询此表对应的字段列表
if(tabcols==null ||tabcols.isEmpty()){
return;
}
if(tabfields==null ||tabfields.isEmpty()){
tabfields=newArrayList();
}
Integeri=1;
boolean exist=false;
for(Mapcol:tabcols){
for(ExcelInfo tf:tabfields){
Stringtfcode = obj2str(col.get("tfcode"));
if(tfcode.equalsIgnoreCase(tf.getKey_column().trim())){
exist=true;
break;
}
}
if(exist){
continue;
}
ExcelInfo tf1= new ExcelInfo();
tf1.setId(UUID.randomUUID().toString());
tf1.setAddtime(new Timestamp(System.currentTimeMillis()));
tf1.setTypeid(id);
tf1.setKey_column(obj2str(col.get("tfcode")));
tf1.setTitle(obj2str(col.get("tfname")));
tf1.setCtype(type2t(col.get("tftype")));
tf1.setOrderby(i++);
tf1.setIskey("0");
tabfields.add(tf1);
excelConfDao.add(tf1, true);
}
至此导入导出的EXCEL配置就搞定了。接下来就是导入导出的操作了。
总结:
这几天做导入导出的功能,还是参照其他系统来做的,主要是调试代码,在调试代码的过程中才渐渐的搞明白了。到最后,觉得其实也挺简单的,还有就是你调试的时候弄懂了,只是搞懂了一部分,当你真正自己动手去敲能够完整的弄出来的时候,才是真正的弄懂了。