利用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 >
    

    
< area >
        
< region >
            
< original  beginX ="0"  beginY ="6"  endX ="2"  endY ="12" >
            
original >

            
< target  beginX ="0"  beginY ="6"  endX ="10"  endY ="12" > target >
        
region >
        

        
< header >
            

            
< 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 ="" >
                

            
operation >
        
header >
        

        
< header-extra >
            

            
< 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 >
            

            
< 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 >
            

            
< 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 >

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

你可能感兴趣的:(做软件人)