Posted on 2011-09-03 09:23
ZhouFeng 閱讀(437)
評論(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的版本
先貼在這里,就當是給自己做個筆記吧。如果上面的內容能為他人提供一點參考,我很榮幸