1. 程式人生 > >Java web專案利用POI匯出EXCEL表格

Java web專案利用POI匯出EXCEL表格

	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方法就可以了)
在這裡插入圖片描述
結果為:
在這裡插入圖片描述