隨筆 - 8  文章 - 24  trackbacks - 0
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(4)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          1.下載jxl.rar包

          項目地址:http://www.andykhan.com/jexcelapi/
          下載地址:http://www.andykhan.com/jexcelapi/download.html

          目前版本的信息
        1. Reads data from Excel 95, 97, 2000 workbooks
        2. Reads and writes formulas (Excel 97 and later only)
        3. Generates spreadsheets in Excel 2000 format
        4. Supports font, number and date formatting
        5. Supports shading and colouring of cells
        6. Modifies existing worksheets
        7. Supports image creation
        8. Preserves macros on copy
        9. Customizable logging


          2.把包放到WEB-INF的lib目錄下在開發環境中引入這個包

          3.開始寫代碼了,這里以一個Struts1.2的ActionMethod為例,其實只要能取了request和response對象,操作都是一樣的的。

           1    /**
           2     * 生成信息的XLS
           3
               * alex 2007-7-3 下午05:01:56
           4     */

           5    public ActionForward makeRichVoteRZ(ActionMapping mapping, ActionForm form,
           6
                      HttpServletRequest request, HttpServletResponse response)
           7            throws Exception 
          {
           8
                  
           9        //讀出數據

          10        String richvote_id = Common.getValue("richvote_id", request);
          11        String sql = "select user_name,user_sex,user_address,card_id,postalcode,mobile,tel_day,email from tbl_member where member_id in (select user_id from tbl_vote_detail where vote_id in(select vote_id from tbl_vote where vote_board = '"+richvote_id+"'))"
          ;
          12        RowSet rs =
           table.select(sql);
          13
                  
          14        //生成xls

          15        try{
          16
                      
          17            response.setContentType("application/vnd.ms-excel"
          );
          18            response.addHeader("Content-Disposition","attachment;   filename=\""   +  Common.getFileName()+".xls"  +   "\""
          );    
          19            OutputStream os =
           response.getOutputStream();
          20            WritableWorkbook wwb =
           Workbook.createWorkbook(os);
          21
                      
          22
                      
          23            int ncout =
           rs.length();
          24            int maxnum = 50000//一次最多寫入量

          25            int times = (ncout+maxnum-1)/maxnum;
          26
                      
          27            //大循環

          28            for(int t=0; t<times; t++){
          29
                          
          30                //新建一張表

          31                WritableSheet wsheet = wwb.createSheet("members_"+(t+1),t);
          32                //設置表頭

          33                Label label = new Label(0,0,"");
          34
                          wsheet.addCell(label);
          35                label = new Label(0,0,"會員姓名"
          );
          36
                          wsheet.addCell(label);
          37                label = new Label(1,0,"卡號"
          );
          38
                          wsheet.addCell(label);
          39                label = new Label(2,0,"聯系地址"
          );
          40
                          wsheet.addCell(label);
          41                label = new Label(3,0,"郵編"
          );
          42
                          wsheet.addCell(label);
          43                label = new Label(4,0,"聯系電話"
          );
          44
                          wsheet.addCell(label);
          45                label = new Label(5,0,"手機"
          );
          46
                          wsheet.addCell(label);
          47                label = new Label(6,0,"Email"
          );
          48
                          wsheet.addCell(label);
          49                label = new Label(7,0,"性別"
          );
          50
                          wsheet.addCell(label);
          51
                          
          52
                          
          53                //讀出數據

          54                int base = (t*maxnum);
          55                for(int i = 0; i < rs.length(); i++)
          {
          56                    Row rw = rs.get(i+
          base);
          57                    //System.out.println((i+1));

          58                    label = new Label(0,(i+1),(String)rw.get("user_name")    );
          59
                              wsheet.addCell(label);
          60                    label = new Label(1,(i+1),(String)rw.get("card_id"
          ));
          61
                              wsheet.addCell(label);
          62                    label = new Label(2,(i+1),(String)rw.get("user_address"
          ));
          63
                              wsheet.addCell(label);
          64                    label = new Label(3,(i+1),(String)rw.get("postalcode"
          ));
          65
                              wsheet.addCell(label);
          66                    label = new Label(4,(i+1),(String)rw.get("tel_day"
          ));
          67
                              wsheet.addCell(label);
          68                    label = new Label(5,(i+1),(String)rw.get("mobile"
          ));
          69
                              wsheet.addCell(label);
          70                    label = new Label(6,(i+1),(String)rw.get("email"
          ));
          71
                              wsheet.addCell(label);
          72                    label = new Label(7,(i+1),(String)rw.get("user_sex"
          ));
          73
                              wsheet.addCell(label);
          74                }
              
          75
                          
          76            }
          //結束大循環
          77            
          78
                      wwb.write();
          79
                      wwb.close();
          80
                      os.close();
          81
                      response.flushBuffer();
          82
                      
          83        }
          catch(Exception e){
          84            System.out.println("生成信息表(Excel格式)時出錯:"
          );
          85
                      e.printStackTrace();
          86        }

          87        
          88        return null
          ;
          89    }


          代碼簡單說明:
          1.設定好response的相關屬性:
          response.setContentType("application/vnd.ms-excel");
          response.addHeader("Content-Disposition","attachment;   filename=\""   +  Common.getFileName()+".xls"  +   "\""); 
          2.取到response的OutputStream實例,并用這個實例化一個WritableWorkbook對象
          OutputStream os = response.getOutputStream();
          WritableWorkbook wwb = Workbook.createWorkbook(os);
          3.新建一個表
          WritableSheet wsheet = wwb.createSheet("members_"+(t+1),t);
          4.往表里加行頭
          Label label = new Label(0,0,"");
              wsheet.addCell(label);
              label = new Label(0,0,"會員姓名");
              wsheet.addCell(label);
              label = new Label(1,0,"卡號");
              wsheet.addCell(label);
              label = new Label(2,0,"聯系地址");
              wsheet.addCell(label);
              label = new Label(3,0,"郵編");
              wsheet.addCell(label);
              label = new Label(4,0,"聯系電話");
              wsheet.addCell(label);
              label = new Label(5,0,"手機");
              wsheet.addCell(label);
              label = new Label(6,0,"Email");
              wsheet.addCell(label);
              label = new Label(7,0,"性別");
              wsheet.addCell(label);
          5.往表里加數據行
          for(int i = 0; i < rs.length(); i++){
               Row rw = rs.get(i+base);
               //System.out.println((i+1));
               label = new Label(0,(i+1),(String)rw.get("user_name") );
               wsheet.addCell(label);
               label = new Label(1,(i+1),(String)rw.get("card_id"));
               wsheet.addCell(label);
               label = new Label(2,(i+1),(String)rw.get("user_address"));
               wsheet.addCell(label);
               label = new Label(3,(i+1),(String)rw.get("postalcode"));
               wsheet.addCell(label);
               label = new Label(4,(i+1),(String)rw.get("tel_day"));
               wsheet.addCell(label);
               label = new Label(5,(i+1),(String)rw.get("mobile"));
               wsheet.addCell(label);
               label = new Label(6,(i+1),(String)rw.get("email"));
               wsheet.addCell(label);
               label = new Label(7,(i+1),(String)rw.get("user_sex"));
               wsheet.addCell(label);
              } 
          6.把生成的excel數據輸出到response的OutputStream
          wwb.write();
             wwb.close();
             os.close();
             response.flushBuffer();
          7.完成

          有什么疑問可以留言,我會盡量幫助。

        10. posted on 2007-09-20 14:47 Vincent.Yu 閱讀(12517) 評論(10)  編輯  收藏

          FeedBack:
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2007-09-27 19:30 千里冰封
          呵呵,POI包不是更好嗎?  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2008-05-30 10:03 艷兒
          (*^__^*) 嘻嘻……,好像不用這么麻煩吧!
          直接在jsp頭部加一行,就ok了啊!o(∩_∩)o...哈哈!
          word頁面只要在jsp頭設置如下指令:
          <%@page contentType="application/msword;charset=GBK" %>

          excel如下:
          <%@page contentType="application/vnd.ms-excel;charset=GBK" %>

          其他內容直接輸出就ok了!
          http://newyaner.blog.sohu.com/84170098.html
            回復  更多評論
            
          # 補充 2008-05-30 10:05 艷兒
          導出和打印功能都可以這樣實現!
          如果要動態編輯excel文件就用樓主的jxl吧!  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2008-07-16 22:20 易發布
          易發布分類信息網 http://www.yifabu.cn 引領分類信息新時代 發布信息,展示產品,投放廣告,我們為您想得更周到,交流群:56041092
          收錄情況:各大搜索引擎收錄良好,百度每日更新快照,各個關鍵字表現良好,排名前列,內頁鏈接 http://www.yifabu.cn/link/add.asp  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2008-10-25 01:24 網友
          response.setContentType("application/vnd.ms-excel;charset=gbk");
          我在我的servlet設置了這個,為什么我彈出的保存窗口,的文件名是亂碼???  回復  更多評論
            
          # 用ajax發送請求,怎么獲取[未登錄] 2008-11-19 20:39 小小
          用ajax發送請求,怎么獲取  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2009-03-02 14:36 wangdong
          我怎么弄都是亂碼呢!!!
          <%@ page contentType="application/vnd.ms-excel;charset=utf-8"%>
          <%@ page import="org.apache.poi.hssf.*,org.apache.poi.hssf.usermodel.*,java.io.*" %>
          <%
          response.setHeader("Pragma","no-cache");
          response.setHeader("Cache-Control","no-cache");
          response.setDateHeader("Expires",0);
          response.setContentType("application/vnd.ms-excel");
          response.setHeader("Content-disposition","attachment;filename=\"test.xls\"");//定義文件名
          HSSFWorkbook wbb = new HSSFWorkbook();
          HSSFSheet sheet = wbb.createSheet();
          wbb.setSheetName(0, "sheet");
          HSSFRow row = sheet.createRow(0);
          HSSFCell cell1 = row.createCell((short)0);
          cell1.setCellValue("test");
          HSSFCell cell2 = row.createCell((short)1);
          cell2.setCellValue("中文");
          OutputStream ops = response.getOutputStream();
          wbb.write(ops);
          ops.flush();
          ops.close();
          %>  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2009-07-28 15:36 yuwenfang
          能否把引的包都貼出來呢?呵呵..本人是菜鳥,沒看明白!  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2011-01-13 18:10 yagjie
          我怎么用不上了  回復  更多評論
            
          # re: Servlet,JSP 動態生成excel文件并提示下載的簡單方法 2015-10-29 16:48 阿朱
          我在jsp頁面請求action 然后樓主方法我是放在action中的 斷點跟蹤方法 至 彈出下載提示框后 一直在循環調用 死循環了
            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 宜阳县| 南郑县| 江阴市| 宜良县| 新晃| 仙游县| 金川县| 西昌市| 神木县| 会同县| 郧西县| 蕉岭县| 芦溪县| 灌云县| 东港市| 齐齐哈尔市| 鲁甸县| 札达县| 获嘉县| 七台河市| 米泉市| 通山县| 昌黎县| 亚东县| 九台市| 连山| 巴里| 荆门市| 吴堡县| 延川县| 洱源县| 绥化市| 齐河县| 沈丘县| 西华县| 汤原县| 景谷| 兴仁县| 衡阳市| 偏关县| 永济市|