Java web專案利用POI匯出EXCEL表格
阿新 • • 發佈:2018-12-29
SSH2 POI匯出EXCEL表格
1.首先匯入poi的jar包
- HSSFWorkbook :工作簿,代表一個excel的整個文件
- HSSFSheet:工作表
- HSSFRow :行
- HSSFCell:單元格
- HSSFCellStyle :單元格樣式
- HSSFFont:字型
Excel中的工作簿、工作表、行、單元格中的關係:
一個Excel檔案對應於一個workbook(HSSFWorkbook),
一個workbook可以有多個sheet(HSSFSheet)組成,
一個sheet是由多個row(HSSFRow)組成
2.實體類、dao層、biz層及對映配置相信都弄好了,主要是在action層加入以下程式碼:
//匯出excel文件 public void contrExcel() throws Exception { HSSFWorkbook workbook=new HSSFWorkbook();//文件物件 HSSFSheet exSheet =workbook.createSheet();//表單 // 1. 建立合併單元格物件 CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,0,1);//起始行號,結束行號,起始列號,結束列號 //1.2 頭標題樣式(該createCellStyle,調了後面的方法) HSSFCellStyle style1 = createCellStyle(workbook, (short)15); //字型 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.WHITE.index); //字型顏色 style1.setFont(font); //設定背景模式 SOLID_FOREGROUND 背景以設定前景顏色一樣 style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //設定前景顏色 style1.setFillForegroundColor(HSSFColor.LIGHT_BLUE.index); //設定背景顏色 style1.setFillBackgroundColor(HSSFColor.LIGHT_BLUE.index); style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 //1.3列標題樣式 HSSFCellStyle style2 = createCellStyle(workbook, (short)12); exSheet.addMergedRegion(cellRangeAddress); exSheet.setDefaultColumnWidth(20); //設定背景模式 SOLID_FOREGROUND 背景以設定前景顏色一樣 style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //設定前景顏色 style2.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); //設定背景顏色 style2.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 HSSFCellStyle style3 = createCellStyle(workbook, (short)11); style3.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 // 3.建立行 //3.1、建立頭標題行;並且設定頭標題 HSSFRow createRow = exSheet.createRow(0);//第一行 //格子單元 HSSFCell cell_1 = createRow.createCell(0);//表頭 cell_1.setCellStyle(style1); cell_1.setCellValue("客戶構成分析"); HSSFRow row1 = exSheet.createRow(1);//第二行 HSSFCell cell_2 = row1.createCell(0);//第一列:客戶名稱 cell_2.setCellStyle(style2); cell_2.setCellValue("客戶名稱"); HSSFCell cell_3 = row1.createCell(1);//第二列:訂單金額 cell_3.setCellStyle(style2); cell_3.setCellValue("訂單金額"); //整理資料資料 PageBean pageBean = new PageBean(); List<Map<String, Object>> listContr = this.contrBiz.getList(cstCustomer, pageBean); List<CstCustomer> list = new ArrayList<CstCustomer>(); CstCustomer cs = null; for (Map<String, Object> map : listContr) { cs = new CstCustomer(); cs.setCustName(map.get("name").toString()); cs.setSumPrice(map.get("price").toString()); list.add(cs); } //獲得資料 for(int i = 0; i < list.size();i++){ HSSFRow row = exSheet.createRow(i+2);//第三行後 HSSFCell cell1 = row.createCell(0); HSSFCell cell2 = row.createCell(1); cell1.setCellValue(list.get(i).getCustName());//設值:客戶名稱 cell2.setCellValue(list.get(i).getSumPrice());//設值:訂單金額 cell1.setCellStyle(style3); cell2.setCellStyle(style3); } //注意:【整理資料資料,獲得資料】屬於你獲得資料的方法,你想展示幾列加幾條列表加就好了。 HttpServletResponse response = ServletActionContext.getResponse(); //把響應頭資料型別設定為任意二進位制流,用於上傳下載 response.setContentType("application/octet-stream"); //告訴瀏覽器通過下載方式開啟,並設定下載檔名 response.setHeader("Content-Disposition", "attachment;fileName="+ new String("客戶貢獻分析.xls".getBytes(),"ISO8859-1")); ServletOutputStream sos = response.getOutputStream(); workbook.write(sos); if(sos != null){ sos.close(); } }
//樣式 private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short s) { // TODO Auto-generated method stub //單元格樣式 HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 //邊框 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下邊框 style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 //建立字型 HSSFFont font = workbook.createFont(); //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗字型 font.setFontName("宋體");//設定字型 font.setFontHeightInPoints(s); //載入字型 style.setFont(font); return style; }
3.jsp頁面呼叫(匯出的按鈕只要能呼叫contrExcel方法就可以了)
結果為: