有的時候由於咱們須要將頁面上的表格數據導出到Excel表。咱們能夠寫一個導出的java接口。java
這個接口先在服務器上寫一份Excel文件,而後再寫一份到用戶這。至於爲何要如今服務器上先寫一份,多是爲了備份啥的把。。。web
這個接口須要的參數有:服務器
1.查詢須要導出的List數據的條件參數dom
2.HttpServletRequest編碼
3.HttpServletResponseexcel
下面是邏輯code
String filename = new RandomGUID.getUUID32() + ".xls"; //在服務器上建立一個exportexcel文件夾(若是這個exportexcel文件夾不存在的話) String dirpath = request.getSession().getServletContext().getRealPath("/") + "exportexcel"; File dir = new File(dirpath); if(!dir.exists) dir.mkdirs();//若是目標文件夾不存在則建立新的文件夾 String fileuri = dirpath + File.separator + filename; //假設咱們已經經過接口的第一個參數獲取到要導出的List數據了,這裏暫定list //設置表頭 String btList[] = {"編號", "姓名", "年齡"}; //第一步,建立一個webbook,對應一個Excel文件 HSSWorkbook wb = new HSSWorkbook(); //第二步,在webook中添加一個sheet,對應Excel文件中的sheet HSSFSheet sheet = wb.createSheet(); //第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制short HSSFRow row = sheet.createRow((int) 0); //第四步,建立單元格,並設置表頭 設置表頭居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//建立一個居中格式 for(short i = 0; i < (short) btList.length; i++){ HSSFCell cell = row.createCell((short) i); cell.setCellValue(btList[i]); cell.setCellStyle(style); } //設置背景顏色 style.setFillBackGroundColor(Font.COLOR_NORMAL); int j = 1;//記錄行數 //下面遍歷list,將數據寫在每一列上 for(int i = 0; i < list.size(); i++){ //建立一行 HSSFRow datarow = sheet.createRow((int) j); //建立這行的一格 HSSFCell cell0 = datarow.createCell(0); //將值寫入這一格 cell0.setCellValue(寫表頭裏面第一個字段也就是編號的值); cell0.setCellStyle(style);//設置該單元格的格式 //寫這一行的其餘格子同理 ... j++; } //將webbook的內容寫入服務器那個文件裏 FileOutputStream fout = new FileOutputStream(fileuri); wb.write(fout); fout.close(); /**到這裏,數據已經導出到服務器上的fileuri路徑下了**/ /**下面作的就是至關於把服務器上的文件下載下來**/ //設置下載的文件名字以及編碼格式 String name = new String("信息.xls".getBytes("UTF-8"), "ISO-8859-1"); response.setHeader("Content-Disposition", "attachment:filename=" + name); InputStream in = new FileInputStream(new File(fileuri)); OutputStream out = response.getOutputStream(); int b; while((b = in.read() != -1){ out.write(b); } in.close(); out.close();