posts - 2, comments - 27, trackbacks - 0, articles - 60
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          多Excel合并的一種處理辦法

          Posted on 2011-09-03 09:23 ZhouFeng 閱讀(438) 評論(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的版本
          先貼在這里,就當是給自己做個筆記吧。如果上面的內容能為他人提供一點參考,我很榮幸
          主站蜘蛛池模板: 泗水县| 蓬安县| 崇仁县| 沂南县| 台南市| 枣强县| 南丰县| 汕头市| 奉新县| 定陶县| 阳泉市| 彝良县| 泌阳县| 托克托县| 清涧县| 泰安市| 岳普湖县| 涟源市| 合作市| 余姚市| 长沙县| 元朗区| 江阴市| 泽州县| 闻喜县| 桑日县| 龙口市| 兴业县| 太白县| 梧州市| 神农架林区| 沁源县| 河西区| 克什克腾旗| 宝山区| 新昌县| 股票| 丰都县| 宜兴市| 徐水县| 华蓥市|