隨筆 - 8  文章 - 24  trackbacks - 0
          <2015年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(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目錄下在開發(fā)環(huán)境中引入這個包

          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        //讀出數(shù)據(jù)

          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            //大循環(huán)

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

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

          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,"聯(lián)系地址"
          );
          40
                          wsheet.addCell(label);
          41                label = new Label(3,0,"郵編"
          );
          42
                          wsheet.addCell(label);
          43                label = new Label(4,0,"聯(lián)系電話"
          );
          44
                          wsheet.addCell(label);
          45                label = new Label(5,0,"手機(jī)"
          );
          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                //讀出數(shù)據(jù)

          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            }
          //結(jié)束大循環(huán)
          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.設(shè)定好response的相關(guān)屬性:
          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,"聯(lián)系地址");
              wsheet.addCell(label);
              label = new Label(3,0,"郵編");
              wsheet.addCell(label);
              label = new Label(4,0,"聯(lián)系電話");
              wsheet.addCell(label);
              label = new Label(5,0,"手機(jī)");
              wsheet.addCell(label);
              label = new Label(6,0,"Email");
              wsheet.addCell(label);
              label = new Label(7,0,"性別");
              wsheet.addCell(label);
          5.往表里加數(shù)據(jù)行
          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數(shù)據(jù)輸出到response的OutputStream
          wwb.write();
             wwb.close();
             os.close();
             response.flushBuffer();
          7.完成

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

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

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

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

          其他內(nèi)容直接輸出就ok了!
          http://newyaner.blog.sohu.com/84170098.html
            回復(fù)  更多評論
            
          # 補充 2008-05-30 10:05 艷兒
          導(dǎo)出和打印功能都可以這樣實現(xiàn)!
          如果要動態(tài)編輯excel文件就用樓主的jxl吧!  回復(fù)  更多評論
            
          # re: Servlet,JSP 動態(tài)生成excel文件并提示下載的簡單方法 2008-07-16 22:20 易發(fā)布
          易發(fā)布分類信息網(wǎng) http://www.yifabu.cn 引領(lǐng)分類信息新時代 發(fā)布信息,展示產(chǎn)品,投放廣告,我們?yōu)槟氲酶艿剑涣魅海?6041092
          收錄情況:各大搜索引擎收錄良好,百度每日更新快照,各個關(guān)鍵字表現(xiàn)良好,排名前列,內(nèi)頁鏈接 http://www.yifabu.cn/link/add.asp  回復(fù)  更多評論
            
          # re: Servlet,JSP 動態(tài)生成excel文件并提示下載的簡單方法 2008-10-25 01:24 網(wǎng)友
          response.setContentType("application/vnd.ms-excel;charset=gbk");
          我在我的servlet設(shè)置了這個,為什么我彈出的保存窗口,的文件名是亂碼???  回復(fù)  更多評論
            
          # 用ajax發(fā)送請求,怎么獲取[未登錄] 2008-11-19 20:39 小小
          用ajax發(fā)送請求,怎么獲取  回復(fù)  更多評論
            
          # re: Servlet,JSP 動態(tài)生成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();
          %>  回復(fù)  更多評論
            
          # re: Servlet,JSP 動態(tài)生成excel文件并提示下載的簡單方法 2009-07-28 15:36 yuwenfang
          能否把引的包都貼出來呢?呵呵..本人是菜鳥,沒看明白!  回復(fù)  更多評論
            
          # re: Servlet,JSP 動態(tài)生成excel文件并提示下載的簡單方法 2011-01-13 18:10 yagjie
          我怎么用不上了  回復(fù)  更多評論
            
          # re: Servlet,JSP 動態(tài)生成excel文件并提示下載的簡單方法 2015-10-29 16:48 阿朱
          我在jsp頁面請求action 然后樓主方法我是放在action中的 斷點跟蹤方法 至 彈出下載提示框后 一直在循環(huán)調(diào)用 死循環(huán)了
            回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南和县| 穆棱市| 凤冈县| 乌什县| 绥化市| 垦利县| 祁连县| 秀山| 拜泉县| 汕头市| 梁平县| 石棉县| 安阳县| 涡阳县| 富锦市| 桐柏县| 乌海市| 定南县| 中卫市| 徐汇区| 蓬溪县| 旅游| 乡城县| 鞍山市| 万安县| 阿克陶县| 沐川县| 阿鲁科尔沁旗| 西充县| 温泉县| 和田市| 平乡县| 集安市| 五常市| 马鞍山市| 河南省| 德清县| 宜黄县| 锡林浩特市| 平昌县| 夏津县|