poi導出excel表

最近在幫人家做一個查詢的功能,需要用到poi導出excel表格,之前一直也沒有用過,不知道是什麼情況,後來在網上找了些資料看下,也就那麼一回事。希望可以給大家一些思路吧。

首先是創建一個sheet,然後再往裏面添加單元格,如果手動輸出過表格的話,原理其實是差不多的。

來一個完整的方法:

 

  1. /**  
  2.      * 導出excel表  
  3.      * @throws IOException   
  4.      */ 
  5.     public void showExcel() throws IOException {  
  6.         String [] headers= {"設備編碼","設備種類","設備名稱","所屬總站","品牌","規格型號","提供商","設備價格","用途","出廠編號","責任人","生產日期","採購日期","啓用日期","建檔日期","保修日期","報廢期至","備註"};  
  7.         String fileName = exportExcels(headers, ServletActionContext.getRequest());  
  8.         HttpServletResponse response=ServletActionContext.getResponse();  
  9.         response.setContentType("application/vnd.ms-excel; charset=utf-8");  
  10.         response.setHeader("Content-Disposition""attachment;filename="+fileName);  
  11.         byte[] buffered = new byte[1024];  
  12.         BufferedInputStream input = new BufferedInputStream(new FileInputStream(ServletActionContext.getRequest().getRealPath("/export")+"/"+fileName));  
  13.         DataOutputStream output = new DataOutputStream(response.getOutputStream());  
  14.         while (input.read(buffered,0,buffered.length) != -1) {  
  15.             output.write(buffered,0,buffered.length);  
  16.         }  
  17.         input.close();  
  18.         output.close();  
  19.     }  
  20.       
  21.     /**  
  22.      * 創建行  
  23.      * @param cells  
  24.      * @param rowIndex  
  25.      * @param demoSheet  
  26.      */ 
  27.     public static void createTableRow(List<String> cells, short rowIndex, HSSFSheet demoSheet) {  
  28.         // 創建第rowIndex行  
  29.         HSSFRow row = demoSheet.createRow((short) rowIndex);  
  30.         for (short i = 0; i < cells.size(); i++) {  
  31.             // 創建第i個單元格  
  32.             HSSFCell cell = row.createCell((short) i);  
  33.             cell.setCellValue(cells.get(i));  
  34.         }  
  35.     }  
  36.     /**  
  37.      * 創建sheet  
  38.      * @param tableHeader  
  39.      * @return  
  40.      */ 
  41.     public  HSSFSheet createExcelSheet(String [] tableHeader,HSSFWorkbook demoWorkBook) {  
  42.         List<Device> devices=deviceService.findAllDevices();  
  43.         HSSFSheet demoSheet = demoWorkBook.createSheet("devices");  
  44.         HSSFHeader header = demoSheet.getHeader();  
  45.         header.setCenter("全部設備表");  
  46.         HSSFRow headerRow = demoSheet.createRow((short0);  
  47.         for (int i = 0; i < tableHeader.length; i++) {  
  48.             HSSFCell headerCell = headerRow.createCell((short) i);  
  49.             headerCell.setCellValue(tableHeader[i]);  
  50.         }  
  51.         for (int j = 1; j < devices.size(); j++) {  
  52.             List<String> list = new ArrayList<String>();  
  53.             list.add(devices.get(j).getDev_no()!=null?devices.get(j).getDev_no():"");  
  54.             list.add(devices.get(j).getCategory().getCat_name()!=null?devices.get(j).getCategory().getCat_name():"");  
  55.             list.add(devices.get(j).getDev_name()!=null?devices.get(j).getDev_name():"");  
  56.             list.add(devices.get(j).getDepartment().getDep_name()!=null?devices.get(j).getDepartment().getDep_name():"");  
  57.             list.add(devices.get(j).getDev_brand()!=null?devices.get(j).getDev_brand():"");  
  58.             list.add(devices.get(j).getDev_spec()!=null?devices.get(j).getDev_spec():"");  
  59.             list.add(String.valueOf(devices.get(j).getDev_fac())!=null?String.valueOf(devices.get(j).getDev_fac()):"");  
  60.             list.add(String.valueOf(devices.get(j).getDev_price())!=null?String.valueOf(devices.get(j).getDev_price()):"");  
  61.             list.add(devices.get(j).getDev_purpose()!=null?devices.get(j).getDev_purpose():"");  
  62.             list.add(devices.get(j).getDev_bookid()!=null?devices.get(j).getDev_bookid():"");  
  63.             list.add(devices.get(j).getUser().getUser_name()!=null?devices.get(j).getUser().getUser_name():"");//責任人  
  64.             list.add(devices.get(j).getDev_protime()!=null?devices.get(j).getDev_protime():"");  
  65.             list.add(devices.get(j).getDev_booktime()!=null?devices.get(j).getDev_booktime():"");  
  66.             list.add(devices.get(j).getDev_usetime()!=null?devices.get(j).getDev_usetime():"");  
  67.             list.add(devices.get(j).getDev_settime()!=null?devices.get(j).getDev_settime():"");  
  68.             list.add(devices.get(j).getDev_retime()!=null?devices.get(j).getDev_retime():"");  
  69.             list.add(devices.get(j).getDev_dumptime()!=null?devices.get(j).getDev_dumptime():"");  
  70.             list.add(devices.get(j).getDev_remark()!=null?devices.get(j).getDev_remark():"");  
  71.             createTableRow(list, (short) j,demoSheet);  
  72.         }  
  73.         return demoSheet;  
  74.     }  
  75.  
  76.     /**  
  77.      * 輸出  
  78.      * @param os  
  79.      * @param tableHeader  
  80.      * @throws IOException  
  81.      */ 
  82.     public void exportExcel(OutputStream os,String [] tableHeader,HSSFWorkbook demoWorkBook) throws IOException {  
  83.         HSSFSheet sheet = createExcelSheet(tableHeader,demoWorkBook);  
  84.         sheet.setGridsPrinted(true);  
  85.         HSSFFooter footer = sheet.getFooter();  
  86.         footer.setRight("Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages());  
  87.         demoWorkBook.write(os);  
  88.     }  
  89.       
  90.      public  String exportExcels(String[] tableHeader,HttpServletRequest request) {  
  91.          HSSFWorkbook demoWorkBook = new HSSFWorkbook();  
  92.          //SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");  
  93.         String fileName="devicess.xls";  
  94.         request=ServletActionContext.getRequest();  
  95.         FileOutputStream fos = null;  
  96.         try {  
  97.             fos = new FileOutputStream(request.getRealPath("/export")+"/"+fileName);  
  98.             exportExcel(fos,tableHeader,demoWorkBook);  
  99.         } catch (Exception e) {  
  100.             e.printStackTrace();  
  101.         } finally {  
  102.             try {  
  103.                 fos.close();  
  104.             } catch (Exception e) {  
  105.                 e.printStackTrace();  
  106.             }  
  107.         }  
  108.           
  109.         return fileName;  
  110.     } 

這個例子是直接在struts2的action上面實現的。首先是創建一個sheet,在sheet裏面創建第一行作爲表頭,表頭裏面的文字作爲一個字符串數組參數傳出去,可以不停的更換。然後就是創建單元格和往單元格里面放數值,device是我這個例子用到的實體類,這個就不給出來了,實際上隨便放一個字符串或者其他都是可以的。組裝成一個完整的excel表格,那麼就要寫入到項目裏面(這裏文件名是固定的),例子是寫到export這個目錄上面的,然後就是寫個下載的方法去調用就OK了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章