jxl導出Excel

之前是用Poi作Excel的操做、最近一個項目用jxl來作!如今項目完成了、作作總結!java

首先呢、須要的固然是jxl的.jar包!---------->jxl.jar<------------數據庫

代碼:由於此次的導出業務不怎麼複雜稍微把對Excel導出的操做提了一下 數組

  
  
           
  
  
  1.     /**
  2. * @author 古道西風  
  3.      * @param file 文件對象  
  4.      * @param objData 導出內容數組  
  5.      * @param sheetName 導出工做表的名稱  
  6.      * @param columns 導出Excel的表頭數組  
  7.      * @return  
  8.      */   
  9.     public static int exportToExcel_3(File file, Object[] objData, String sheetName,   
  10.    
  11.             String[] columns) {   
  12.         int flag = 0;   
  13.         //聲明工做簿jxl.write.WritableWorkbook   
  14.         WritableWorkbook wwb;   
  15.         try {   
  16.             //根據傳進來的file對象建立可寫入的Excel工做薄   
  17.             wwb = Workbook.createWorkbook(file);   
  18.    
  19.             /*  
  20.              * 建立一個工做表、sheetName爲工做表的名稱、"0"爲第一個工做表  
  21.              * 打開Excel的時候會看到左下角默認有3個sheet、"sheet一、sheet二、sheet3"這樣  
  22.              * 代碼中的"0"就是sheet一、其它的一一對應。  
  23.              * createSheet(sheetName, 0)一個是工做表的名稱,另外一個是工做表在工做薄中的位置  
  24.              */   
  25.             WritableSheet ws = wwb.createSheet(sheetName, 0);   
  26.    
  27.             //建立單元格樣式   
  28.             WritableCellFormat wcf = new WritableCellFormat();   
  29.    
  30.             //背景顏色設置爲"那什麼"色   
  31.             wcf.setBackground(Colour.YELLOW);   
  32.    
  33.             /*  
  34.              * 這個是單元格內容居中顯示  
  35.              * 還有不少不少樣式  
  36.              */   
  37.             wcf.setAlignment(Alignment.CENTRE);   
  38.    
  39.             //判斷一下表頭數組是否有數據   
  40.             if (columns != null && columns.length > 0) {   
  41.    
  42.                 //循環寫入表頭   
  43.                 for (int i = 0; i < columns.length; i++) {   
  44.                        
  45.                     /*  
  46.                      * 添加單元格(Cell)內容addCell()  
  47.                      * 添加Label對象Label()  
  48.                      * 數據的類型有不少種、在這裏你須要什麼類型就導入什麼類型  
  49.                      * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label  
  50.                      * Label(i, 0, columns[i], wcf)  
  51.                      * 其中i爲列、0爲行、columns[i]爲數據、wcf爲樣式  
  52.                      * 合起來就是說將columns[i]添加到第一行(行、列下標都是從0開始)第i列、樣式爲何"色"內容居中  
  53.                      */   
  54.                     ws.addCell(new Label(i, 0, columns[i], wcf));   
  55.                 }   
  56.    
  57.                 //判斷表中是否有數據   
  58.                 if (objData != null && objData.length > 0) {   
  59.                        
  60.                     //循環寫入表中數據   
  61.                     for (int i = 0; i < objData.length; i++) {   
  62.    
  63.                         //我這裏直接用Object來接收了、由於狀況特殊沒有javaBean很痛苦、轉換事後獲得一條記錄   
  64.                         Object obj[] = (Object[]) objData[i];   
  65.    
  66.                         //將獲得的記錄寫入Cell(單元格)中   
  67.                         for (int j = 0; j < obj.length; j++) {   
  68.                                
  69.                             //這裏不引用樣式了、j爲列、(i+1)爲行、由於表頭佔去了一行、因此後面的就+1   
  70.                             ws.addCell(new Label(j, i + 1, String.valueOf(obj[j])));   
  71.                         }   
  72.                     }   
  73.                 }   
  74.    
  75.                 //寫入Exel工做表   
  76.                 wwb.write();   
  77.    
  78.                 //關閉Excel工做薄對象    
  79.                 wwb.close();   
  80.             }   
  81.         } catch (Exception ex) {   
  82.             ex.printStackTrace();   
  83.             System.out.println(ex.getMessage());   
  84.             flag = 1;   
  85.         }   
  86.    
  87.         return flag;   
  88.     }   
  89.        
  90.        
  91.     /**  
  92.      * 下載excel  
  93.      * @author 古道西風  
  94.      * @param response  
  95.      * @param url 文件存放路徑,如: request.getRealPath("/");  
  96.      * @param filename 文件名 ,如:20110808.xls  
  97.      * @param listData 數據源  
  98.      * @param sheetName 表頭名稱  
  99.      * @param columns 列名稱集合,如:{物品名稱,數量,單價}  
  100.      */   
  101.     public static void exportexcle_3(HttpServletResponse response,String url,String filename,Object[] listData,String sheetName,String[] columns)   
  102.     {   
  103.         //根據傳進來的文件路徑、建立文件   
  104.         File file = new File(url + filename);   
  105.    
  106.         //調用上面的方法、生成Excel文件   
  107.         exportToExcel_3(file, listData, sheetName, columns);   
  108.    
  109.         //聲明一個file對象   
  110.         File f=null;   
  111.         try {   
  112.             //根據剛剛的文件地址、建立一個file對象   
  113.             f = new File(url + filename);   
  114.    
  115.             //若是文件不存在   
  116.             if (!f.exists()) {   
  117.                 response.sendError(404"File not found!");   
  118.             }   
  119.    
  120.             //建立一個緩衝輸入流對象   
  121.             BufferedInputStream br = new BufferedInputStream(   
  122.                     new FileInputStream(f));   
  123.             byte[] buf = new byte[1024];   
  124.             int len = 0;   
  125.    
  126.             response.reset(); // 很是重要   
  127.             response.setContentType("application/x-msdownload");   
  128.             response.setHeader("Content-Disposition""p_w_upload; filename="   
  129.                     + f.getName());   
  130.                
  131.             //建立輸出流對象   
  132.             OutputStream outStream = response.getOutputStream();   
  133.    
  134.             //開始輸出   
  135.             while ((len = br.read(buf)) > 0)   
  136.                 outStream.write(buf, 0, len);   
  137.    
  138.             //關閉流對象   
  139.             br.close();   
  140.             outStream.close();   
  141.         } catch (FileNotFoundException e) {   
  142.             e.printStackTrace();   
  143.         } catch (IOException e) {   
  144.             e.printStackTrace();   
  145.         }   
  146.         if (f.exists()) {//下載完畢刪除文件   
  147.             f.delete();   
  148.         }   
  149.     }  

在Action中只需在獲取完數據庫中的數據事後直接調用上面的方法、並傳入參數就Ok了!app

 

  
  
           
  
  
  1. Object[] repObj = report.queryMaintainUnit(obj,pageInfo);   
  2.             String[] strArr = {"流水號","路段名","維護站名","所屬系統",   
  3.                     "故障等級","維護工區","派工時間","維修單位",   
  4.                     "接修時間","處理結果","維修結果"};   
  5.             ExportDate expor = new ExportDate();   
  6.             expor.exportexcle_3(response,this.getUrl(),this.getFileName(),   
  7.                     repObj,"維修單位明細表",strArr);  

這是查詢出來的數據:ide

Excel:this

 

在加上分頁功能事後、數據出了問題、當點擊下一頁的時候、會多出一列、這一列是Oracle數據庫分頁時添加的rownum列、一、二、三、四、五、六、這樣!url

由於個人數據在輸出的時候沒有用到javaBean、用的是數組、因此輸出的時候、連後面的那一列也一塊兒輸出了!spa

這樣須要判斷一下、可是不知道爲何、第一頁的時候rownum列不會出現、第二頁還有後面的頁rownum就會跑出來!excel

雖然佔時解決了、可是懼怕它哪天不高興出點什麼亂子就老火了!orm

相關文章
相關標籤/搜索