Posted on 2011-09-03 09:23
ZhouFeng 阅读(425)
评论(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的版本
先贴在这里,就当是给自己做个笔记吧。如果上面的内容能为他人提供一点参考,我很荣幸