總結一下,方便以後查看。
說下自己的這個能夠把頁面表格匯出成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