jsp頁面匯出excel,jxl技術

來源:互聯網
上載者:User

總結一下,方便以後查看。

說下自己的這個能夠把頁面表格匯出成excel檔案的總體印象:

1需要匯入jxl包,我的是jxl-2.6.12.jar

2.寫一個工具類,傳三個參數:OutputStream os,String[] labels,List<String[]> rows;

  OutputStream os:要寫入的地方,如果是放瀏覽器下載,os=response.getOutputStream(),如果是一個固定的地方,os=new FileOutputStream(new File("D:/a.excel").

  String[] labels:這是你表格裡第一行。650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/15303914W-0.png" title="表頭.png" />

 List<String[]> rows:是下面正式的資料,一個String[]數組一行row,數組大小和labels的一樣。

方法代碼:

public static void createExport(OutputStream os,String[] labels,List<String[]> cells) throws Exception{        WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel檔案          WritableSheet ws = wwb.createSheet("Sheet1", 10);        // 建立一個工作表        WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,//設定儲存格的文字格式                UnderlineStyle.NO_UNDERLINE,Colour.BLACK);        WritableCellFormat wcf = new WritableCellFormat(wf);                                                                                                                                                                                                                                                                                                                                                                                          wcf.setVerticalAlignment(VerticalAlignment.CENTRE);        wcf.setAlignment(Alignment.CENTRE);        ws.setRowView(0, 500);                                                                                                                                                                                                 //設定列頭名        for (int j=0;j<labels.length;j++){           ws.addCell(new Label(j, 0, labels[j], wcf));                                                                                                                                                                                                   }        for (int i = 0; i <cells.size();i++){            String[] arys=cells.get(i);            ws.setRowView(i+1, 600);            for (int j=0;j<arys.length;j++){               ws.addCell(new Label(j, i+1,arys[j], wcf));               if(arys[j]!=null && arys[j].length()>0){                   ws.setColumnView(j,arys[j].length()+7);               }else{                   ws.setColumnView(j,30);               }            }        }        wwb.write();        wwb.close();    }}

3寫一個方法 去產生資料,把String[] labels和String[] rows填滿,傳給createExport()方法。我就以使用者列表的形式為例。


public void exportUsersListToExcel(HttpServletResponse response,StringBuilder sql) {        // TODO Auto-generated method stub        String[] labels={"使用者編號","使用者名稱","真實姓名"};        List<String[]> cells=new ArrayList<String[]>();        List<UserProfile> users =this.findUserByNativeSql(sql, -1, -1);//查詢方法,自己定義的        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm");        try {    for (UserProfile user : users) {    String[] cell=newString[labels.length];    cell[0]=String.valueOf(user.getId());    cell[1]=user.getUserName();    cell[2]=user.getRealName();    cells.add(cell);        }            ExcelExportUtil.createExport(response.getOutputStream(), labels, cells);        } catch (Exception e) {        e.printStackTrace();        }    }

4頁面發請求,進入Servlet.我用的是spring mvc,進入Controller,寫個方法,調第三步的方法,返回給瀏覽器,產生資料。

@RequestMapping(value = "/customer_base_manage/exportToExcel", produces = { "text/html;charset=UTF-8" })    public void exportUsersListToExcel(            HttpServletResponse response,            @RequestParam(value = "condition", defaultValue = "all") String condition,            @RequestParam(value = "context", defaultValue = "") String context) {        response.reset();        try {            response.setHeader("Content-disposition", "attachment;filename="                    + new String("使用者資訊列表".getBytes("GB2312"), "8859_1")                    + ".xls");            response.setContentType("application/msexcel");            customerService.exportUsersListToExcel(response,                    getClauseSql(condition, context));        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }
  • 這裡有幾點注意:

  • getClauseSql()是自訂的產生查詢語句的方法,傳到第三步的方法參數。

  • respons需要reset()一下

  • 設定發給用戶端瀏覽器的訊息頭。設定檔案名稱文件類型。response.setHeader()和response.setContentType();


           每次應用環境不一樣,有的地方需要自己自由發揮。全當自己給自己總結,寫的不好或有不正確的地方,希望能有同道高手指正。650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/153039D37-1.gif" />


本文出自 “在路上” 部落格,請務必保留此出處http://javafanpeng.blog.51cto.com/2209268/1290220

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.