前幾天,接到一項(xiàng)任務(wù),要對(duì)一批EXCEL數(shù)據(jù)進(jìn)行處理,它們只是內(nèi)容不一樣,結(jié)構(gòu)都是一致的,主要是合并那所有的數(shù)據(jù),差不多有近百個(gè)文件。以前也做過,只不過沒有這么多,之前用的辦法是借助于ACCESS來(lái)做的,把EXCEL一個(gè)個(gè)的導(dǎo)入到ACCESS里面,然后處理好了再導(dǎo)出到EXCEL,或是導(dǎo)出到EXCEL中再進(jìn)行處理,這次文件有點(diǎn)多,要是一個(gè)一個(gè)的導(dǎo)也可以完成,只是感覺太不科學(xué)了,老在重復(fù)做一些枯燥簡(jiǎn)單的事情,所以就想到用程序的方法交給計(jì)算機(jī)實(shí)現(xiàn)了,想過用EXCEL的VBA來(lái)做,可我不太熟悉,之前用JAVA做過一個(gè)程序來(lái)處理這樣的數(shù)據(jù),可是沒有在現(xiàn)在計(jì)算機(jī)上,只得重新做了,于是還是考慮用JAVA來(lái)實(shí)現(xiàn),下載jxl庫(kù)(http://jexcelapi.sourceforge.net/),用來(lái)處理EXCEL,剛開始從EXCEL中讀取數(shù)據(jù)沒有問題,寫EXCEL文件的時(shí)候,老是用EXCEL打不開,后來(lái)干脆換了種方法,直接寫成文本文件的格式,然后將文本文件用EXCEL打開,我想這樣來(lái)處理更簡(jiǎn)單一些,下面是我寫的一些代碼
先貼在這里,就當(dāng)是給自己做個(gè)筆記吧。如果上面的內(nèi)容能為他人提供一點(diǎn)參考,我很榮幸
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 {
//構(gòu)造Workbook(工作薄)對(duì)象
wb=Workbook.getWorkbook(file);
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(wb==null)
return null;
//獲得了Workbook對(duì)象之后,就可以通過它得到Sheet(工作表)對(duì)象了
Sheet sheet = wb.getSheet(0);
int rsColumns = sheet.getColumns();
int rsRows = sheet.getRows();
//rows從1開始,不包含標(biāo)題行
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();
}
}
程序很小,沒怎么考慮結(jié)構(gòu),可能有些處理方式?jīng)]有設(shè)計(jì)好,不過目前只能在開發(fā)環(huán)境中運(yùn)行,沒有設(shè)計(jì)成發(fā)行的版本,可以修改成命令行方式下的參數(shù)模式,或是做成一個(gè)簡(jiǎn)單的窗口模式,因?yàn)樾枰Y(jié)果數(shù)據(jù)時(shí)間有些緊迫,所以跑完這個(gè)代碼后,就沒有繼續(xù)修改了,如果哪天有時(shí)間,再來(lái)完善一下。也許可以再考慮一個(gè)VBA的版本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 {
//構(gòu)造Workbook(工作薄)對(duì)象
wb=Workbook.getWorkbook(file);
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(wb==null)
return null;
//獲得了Workbook對(duì)象之后,就可以通過它得到Sheet(工作表)對(duì)象了
Sheet sheet = wb.getSheet(0);
int rsColumns = sheet.getColumns();
int rsRows = sheet.getRows();
//rows從1開始,不包含標(biāo)題行
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();
}
}
先貼在這里,就當(dāng)是給自己做個(gè)筆記吧。如果上面的內(nèi)容能為他人提供一點(diǎn)參考,我很榮幸