隨筆-17  評(píng)論-64  文章-79  trackbacks-1
          我們用到了JXL的一些知識(shí),關(guān)于JXL我懂得也不是很多,但是找到了一篇很不錯(cuò)的文章,我想也該推薦大家去看看。好東西,自然是大家分享。

          http://blog.csdn.net/airskys/archive/2005/03/31/334548.aspx

                  接下來看看我們的通用程序是怎么寫的。其實(shí)也沒有什么敲門,只是傳進(jìn)去了一個(gè)將要從數(shù)據(jù)庫中讀出數(shù)據(jù)的SQL語句,將執(zhí)行出來的結(jié)果寫入到 Excel中顯示出來而已。

           

          import jxl.Workbook;
          import jxl.write.Label;
          import jxl.write.WritableWorkbook;
          import jxl.write.WriteException;


          public void getExcelResult(String sql,OutputStream os) throws SQLException,IOException, WriteException{

                             
          //首先獲取結(jié)果集
                              
          //這里獲取RowSet的方法可以自己寫
                               CachedRowSet crs = this.GetResult(sql);

                               
          //然后將結(jié)果集轉(zhuǎn)化為Excel輸出
               
          //初始化工作

               WritableWorkbook wwb 
          = null;

               
          try {
                                      wwb 
          = Workbook.createWorkbook(os);

                    
          //創(chuàng)建工作表
                     jxl.write.WritableSheet ws = wwb.createSheet("Sheet1"0);
                                      
          //逐行添加數(shù)據(jù)
                   int i = 0;
                   
          while (crs.next()){
                       
          for (int j=1;j<=crs.getMetaData().getColumnCount();j++){
                                            String s 
          = crs.getString(j);
                           Label labelC 
          = new Label(j-1, i, s);
                           ws.addCell(labelC);
                      }
                          i
          ++;
                  }

                  } 
          catch (Exception e) {
                      logger.error(
          "export excel error:"+e);
                      e.printStackTrace();
                  } 
          finally {
                      
          if (wwb != null){
                          wwb.write();
                          wwb.close();
                      }
                  }
                  
              }

                  看到了吧!其實(shí)這個(gè)方法很簡單,就是提供一個(gè)查詢的SQL語句和一個(gè)OutPutStream對(duì)象就可以了。

                  接下來看看我是怎么在JSP頁面中調(diào)用并且生成文檔,然后提示用戶是打開還是保存的。

           

          <body>
              
          <%

                  response.reset();
                  response.setContentType(
          "application/vnd.ms-excel");        
                  String sql
          =request.getParameter("sql");
                  Sqlconn.getExcelResult(sql,response.getOutputStream());
              
          %>    
          </body>

                  在前一個(gè)頁面中提交要查詢的SQL語句,在這里得到后,調(diào)用getExcelResult()方法創(chuàng)建Excel文件,就在這里一步完成了。可以看到,這里的OutPutStream對(duì)象我使用了Response的getOutPutSteam()方法得到了一個(gè)OutPutSteam,執(zhí)行的結(jié)果將會(huì)對(duì)response進(jìn)行操作。在此之前,已經(jīng)設(shè)定JSP文件的ContentType為application/vnd.ms-excel,即會(huì)得到這個(gè)response對(duì)象操作形成的excel文件。

                  當(dāng)然,這樣執(zhí)行出來的結(jié)果不是很好看。所以,可以想辦法修改生成文檔的樣式等。關(guān)于這方面,上面的地址中有很詳細(xì)的介紹。非常使用。大家可以根據(jù)自己的情況寫出各種各樣的樣式來,真是不錯(cuò)啊。

          posted on 2007-10-19 19:43 飛鳥 閱讀(1077) 評(píng)論(2)  編輯  收藏 所屬分類: JAVA

          評(píng)論:
          # re: Java生成Excel文件通用程序 2008-05-23 17:23 | 懶人
          能不能不出現(xiàn)那個(gè)提示?  回復(fù)  更多評(píng)論
            
          # re: Java生成Excel文件通用程序[未登錄] 2008-05-23 19:20 | 飛鳥
          這個(gè)沒辦法,瀏覽器為了安全必須提示用戶  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 施秉县| 厦门市| 河曲县| 桐城市| 阿荣旗| 拉萨市| 衡南县| 嘉黎县| 栾城县| 绥江县| 墨竹工卡县| 内黄县| 宁强县| 三江| 灵丘县| 屏东县| 潞城市| 马公市| 大邑县| 柘城县| 德兴市| 苏尼特右旗| 常州市| 三原县| 西华县| 和硕县| 渝北区| 巨鹿县| 荆州市| 桦甸市| 宁明县| 永宁县| 巩义市| 那坡县| 民乐县| 疏勒县| 吴忠市| 米脂县| 五峰| 子洲县| 淳化县|