javaweb使用POI導出導出excel表格

由於工作的需要,需要用java將數據庫中的數據導出爲Excel表格,這就用到了Apache的POI組件,該組件讓我們能夠自定義創建Excel工作薄,然後導出文件即可。

1.首先準備好POI的包,使用maven導入或者直接加載jar都可以。

我是下載了poi-3.11-20141221.jar,poi-ooxml-3.11-20141221.jar,poi-ooxml-schemas-3.11-20141221.jar這三個包,添加到項目中即可。

使用maven的依賴如下:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

2.創建excel的工作簿

POI創建excel的步驟就是:創建工作簿----->在工作簿中創建表格------>往表格中填入數據。

(1)對於Excel2007之前的版本(exce文件後綴是xls)

用到的對象是HSSFWorkbook

創建語句如下:

Workbook wb = new HSSFWorkbook();
(2)對於Excel2007以後(excel文件後綴是xlsx)
用到的對象是XSSFWorkbook
創建語句如下:
 
Workbook wb = new XSSFWorkbook();
以下示例用第二種方式,對於Excel2007之前的版本,所有的對象前綴XSS改爲HSS即可。
 
(3)創建工作簿之後是創建工作頁面(sheet):
 
XSSFSheet sheet = wb.getSheetAt(0);
這條語句是創建excel的第一個頁面,也就是一個sheet。
 
(4)創建sheet之後是創建行,其中index是行索引。
 
XSSFRow row = sheet.createRow(index);
 
(5)最後是在行中創建單元格
 
Cell cell = row.createCell(index);
其中index是列索引。然後爲該單元格設置值。
 
cell.setCellValue(cellValue);
 
(6)也可以爲單元格設置樣式:
先創建樣式對象
CellStyle bodyRowStyle = wb.createCellStyle(); bodyRowStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); bodyRowStyle.setBorderBottom(HSSFCellStyle.BORDER_DOTTED); //下邊框 bodyRowStyle.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左邊框 bodyRowStyle.setBorderTop(HSSFCellStyle.BORDER_DOTTED);//上邊框 bodyRowStyle.setBorderRight(HSSFCellStyle.BORDER_DOTTED);//右邊框 XSSFFont font = wb.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 9);//設置字體大小 bodyRowStyle.setFont(font);
最後爲單元格設置樣式:
 
cell.setCellStyle(cellStyle);
 
(7)到這一步之後Excel的工作簿已經創建完畢,下一步是將其導出,以下是javaweb中的方法。
 
protected void export(HttpServletRequest request,HttpServletResponse response,Workbook hwb,String fileName) throws IOException{ OutputStream os = null; try { os = response.getOutputStream(); response.reset(); String userAgent = request.getHeader("User-Agent"); if (userAgent.toLowerCase().indexOf("msie") > 0) { fileName = URLEncoder.encode(fileName, "UTF-8"); } else { fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); } response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.setContentType("application/x-download; charset=utf-8"); hwb.write(os); os.flush(); } finally { if (os != null) { os.close(); } } }


將我們的工作簿引用wb傳入該函數即可。

至此,excel導出已經完成。
 
ps:有時因爲excel的表頭過於複雜,純粹用程序創建太麻煩,我們可以先創建一個表頭的excel模板文件,然後向該模板中寫入單元格即可。具體方式如下:
 
File file=new File("C:\\Users\\Michael\\Desktop\\header.xlsx"); OPCPackage opcPackage=OPCPackage.open(file); wb = new XSSFWorkbook(opcPackage);

再寫入行的時候記得跳過表頭的那幾行。

更多的POI API可以去官網看一看:http://poi.apache.org/spreadsheet/quick-guide.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章