利用Mapping映射思想实现Excel之间的导入处理

        这么一个多月来,过得比较的沉闷,主要精力都放在了给老师做的多个Excel之间的处理。刚接到任务时还比较的莫名其妙,处理Excel?首先是一片空白,不过马上想到了开源的API,我选了jxl,比较的好用。接着的一两周还是感觉不知道到底要怎么做,老师也没说要怎么做,他也没概念,考虑了一段时间后有了两个要做什么的模型1. 多个子Excel的纪录累计到一个总的Excel中(例如工厂里每个月份都有一个Excel文件记录该月的某方面的生产情况,生成一年的纪录则需合并12个月的纪录文件);2. 多个Excel数据文件数据累计统计到一个总的Excel文件中(例如每个月的各产品的生产量统计成一年的总量)。
        知道做什么了就好办了,不过想到一旦规则改变了怎么办?记录累积时导入的情况复杂点怎么办?还有更多的用户应用怎么办?所以多个Excel导入到单个Excel的规则一定要灵活。最近不久刚看了Hibernate,那个ORM映射思想正在脑子里热着,把JavaBean中的DTO与数据库映射起来,从而利用框架省去了DAO,减轻了开发工作。而利用XML来作灵活的配置是不可少的。处理Excel的导入规则时利用XML Mapping映射看来可以方便和灵活不少。
        从源Excel到目标Excel整个Excel的XML Mapping映射文件采用这样的设计:(1)首先将Excel表分成区域(area),每个area有个有效的范围(rigion),需要处理的源(original)Excel文件和存放处理后的目标(target)Excel文件都有个开始单元格和结束单元格,这之间的矩形就是有效区域;当然area可以多个;(2)然后将一个区域需处理的单元格定义一列(col)或一行(row)头单元格(header),当然也有源(original)和目标(target)矩形区域,头单元格里还有个标记就是操作(operation),记录从源Excel到目标Excel的操作(op)处理规则是什么;header可以多个;(3)可能看起来好像没有标记需处理的真正单元格,其实rigion减去header就是需处理的单元格(4)需特别处理的头(header-extra),这里还没用上,以防以后特殊用途吧;header-extra可以多个。
        然后在程序两中采用个MappingBean来存储XML文件的信息就Ok了。
        这里附上一个模板XML:
       

<? xml version="1.0" encoding="UTF-8" ?>
< excel-mapping >
    
< remark > 这个模型的是将多个excel文件的记录合并到一个总excel里,采用操作为:record </ remark >
    
<!--  erea可以多个  -->
    
< area >
        
< region > <!--  作用域:只作用于指定的这块方形区域里  -->
            
< original  beginX ="0"  beginY ="6"  endX ="2"  endY ="12" >
            
</ original >

            
< target  beginX ="0"  beginY ="6"  endX ="10"  endY ="12" ></ target >
        
</ region >
        
<!--  一个区域需处理的一列(col)或一行(row)头单元格(header) ;header可以多个  -->
        
< header >
            
<!-- col 表示头标签为列; row 表示头标签为行  -->
            
< original  type ="col"  beginX ="1"  beginY ="6"  endX ="1"
                endY
="12" >
            
</ original >

            
< target  type ="col"  beginX ="1"  beginY ="6"  endX ="1"
                endY
="12" >
            
</ target >

            
< operation  op ="record"  expression ="" >
                
<!-- 操作:
                    add-单元格累加;
                    minus-单元格相减;
                    nultiply-单元格相乘;
                    devide-单元格相除;
                    expression-其他自定义表达式,参数为此时expression属性为定义的表达式;
                    record-表示记录型累积
-->
            
</ operation >
        
</ header >
        
<!--  header-extra可能是多余的,但留着以便以后利用 ;header-extra可以多个  -->
        
< header-extra >
            
<!--  col 表示头标签为列; row 表示头标签为行  -->
            
< original  type ="col"  beginX ="1"  beginY ="6"  endX ="1"
                endY
="32" >
            
</ original >

            
< target  type ="col"  beginX ="1"  beginY ="6"  endX ="1"
                endY
="32" >
            
</ target >

            
< operation  op ="record"  expression ="" ></ operation >
        
</ header-extra >
    
</ area >
    
< area >
        
< region > <!--  作用域:只作用于指定的这块方形区域里 -->
            
< original  beginX ="0"  beginY ="6"  endX ="2"  endY ="32" >
            
</ original >

            
< target  beginX ="0"  beginY ="6"  endX ="10"  endY ="32" ></ target >
        
</ region >
        
< header >
            
<!-- col 表示头标签为列; row 表示头标签为行  -->
            
< original  type ="col"  beginX ="1"  beginY ="14"  endX ="1"
                endY
="32" >
            
</ original >

            
< target  type ="col"  beginX ="1"  beginY ="14"  endX ="1"
                endY
="32" >
            
</ target >

            
< operation  op ="record"  expression ="" >
                
            
</ operation >
        
</ header >

        
< header-extra >
            
<!--  col 表示头标签为列; row 表示头标签为行  -->
            
< original  type ="col"  beginX ="1"  beginY ="6"  endX ="1"
                endY
="32" >
            
</ original >

            
< target  type ="col"  beginX ="1"  beginY ="6"  endX ="1"
                endY
="32" >
            
</ target >

            
< operation  op ="record"  expression ="" ></ operation >
        
</ header-extra >
    
</ area >

</ excel-mapping >

        就说到这,看懂了应该还是挺简单的,因为业务现在还算简单,够用了,希望读者或高手可以提出更多的想法或建议!谢谢! 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值