posts - 2, comments - 27, trackbacks - 0, articles - 60
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

多Excel合并的一种处理办法

Posted on 2011-09-03 09:23 ZhouFeng 阅读(417) 评论(0)  编辑  收藏 所属分类: JAVA
前几天,接到一项任务,要对一批EXCEL数据进行处理,它们只是内容不一样,结构都是一致的,主要是合并那所有的数据,差不多有近百个文件。以前也做过,只不过没有这么多,之前用的办法是借助于ACCESS来做的,把EXCEL一个个的导入到ACCESS里面,然后处理好了再导出到EXCEL,或是导出到EXCEL中再进行处理,这次文件有点多,要是一个一个的导也可以完成,只是感觉太不科学了,老在重复做一些枯燥简单的事情,所以就想到用程序的方法交给计算机实现了,想过用EXCEL的VBA来做,可我不太熟悉,之前用JAVA做过一个程序来处理这样的数据,可是没有在现在计算机上,只得重新做了,于是还是考虑用JAVA来实现,下载jxl库(http://jexcelapi.sourceforge.net/),用来处理EXCEL,刚开始从EXCEL中读取数据没有问题,写EXCEL文件的时候,老是用EXCEL打不开,后来干脆换了种方法,直接写成文本文件的格式,然后将文本文件用EXCEL打开,我想这样来处理更简单一些,下面是我写的一些代码
public class Merge {

    
public static void main(String[] args) {
        File outFile 
= new File("e:\\out.txt");
        
        File workdir 
= new File("e:\\workdatas");
        File[] files 
= workdir.listFiles();
        
        BufferedWriter output 
= null;

        Merge app 
= new Merge();
        String str 
= null;
        
        
if (!outFile.exists()){
            
try {
                outFile.createNewFile();
                output 
= new BufferedWriter(new FileWriter(outFile));
                
for(File f:files){
                    System.out.println(f.getName());
                    str 
= app.readExcel(f);
                    output.write(str);
                }
                output.close();
            } 
catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
public String readExcel(File file){   
        StringBuffer sb 
= new StringBuffer();   
           
        Workbook wb 
= null;   
        
try {   
            
//构造Workbook(工作薄)对象   
            wb=Workbook.getWorkbook(file);   
        } 
catch (BiffException e) {   
            e.printStackTrace();   
        } 
catch (IOException e) {   
            e.printStackTrace();   
        }   
           
        
if(wb==null)   
            
return null;   
           
        
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了   
        Sheet sheet = wb.getSheet(0);
        
int rsColumns = sheet.getColumns();
        
int rsRows = sheet.getRows();
        
        
//rows从1开始,不包含标题行
        for(int i=1;i<rsRows;i++){
            
for(int j=0;j<rsColumns;j++){
                String cellString 
= sheet.getCell(j, i).getContents();
                sb.append(cellString).append(
"\t");
            }
            sb.append(
"\r\n");
        }
        wb.close();
        
return sb.toString();   
    }
}
程序很小,没怎么考虑结构,可能有些处理方式没有设计好,不过目前只能在开发环境中运行,没有设计成发行的版本,可以修改成命令行方式下的参数模式,或是做成一个简单的窗口模式,因为需要结果数据时间有些紧迫,所以跑完这个代码后,就没有继续修改了,如果哪天有时间,再来完善一下。也许可以再考虑一个VBA的版本
先贴在这里,就当是给自己做个笔记吧。如果上面的内容能为他人提供一点参考,我很荣幸

只有注册用户登录后才能发表评论。


网站导航: