POI 導出EXCEL

/**
	 * 樣式設置
	 */
	public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
		// *生成一個樣式
        HSSFCellStyle style = workbook.createCellStyle();
        // 設置這些樣式
        // 前景色
        style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
        // 背景色
        style.setFillBackgroundColor(HSSFColor.GREEN.index);
        // 填充樣式
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        // 設置底邊框
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        // 設置底邊框顏色
        style.setBottomBorderColor(HSSFColor.BLACK.index);
        // 設置左邊框
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        // 設置左邊框顏色
  	  	style.setLeftBorderColor(HSSFColor.BLACK.index);
        // 設置右邊框
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        // 設置右邊框顏色
  	  	style.setRightBorderColor(HSSFColor.BLACK.index);
        // 設置頂邊框
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 設置頂邊框顏色  
  	  	style.setTopBorderColor(HSSFColor.BLACK.index);
  	  	// 設置自動換行
  	  	style.setWrapText(false);
  	  	// 設置水平對齊的樣式爲居中對齊
  	  	style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  	  	// 設置垂直對齊的樣式爲居中對齊
  	  	style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//        HSSFFont font = createCellFont(workbook);
//        // 把字體應用到當前的樣式
//        style.setFont(font);
		return style;
	}
	

	/**
	 * 字體設置
	 */
	public static HSSFFont createCellFont(HSSFWorkbook workbook){
		// *生成一個字體
        HSSFFont font = workbook.createFont();
        // 字體顏色
        font.setColor(HSSFColor.VIOLET.index);
        // 字體大小
        font.setFontHeightInPoints((short) 12);
        // 字體加粗
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 是否使用斜體
        font.setItalic( true );
        // 是否使用劃線
        //font.setStrikeout(true);
        // 字體名字
        font.setFontName( " 黑體 " );
        return font;
	}
	

	/**
	 * 註釋設置
	 */
	public static HSSFComment createCellComment(HSSFPatriarch patriarch, String commentText, String commentName){
		// *添加單元格註釋
        // 定義註釋的大小和位置,詳見文檔
        HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 1, (short) 2, 2));
        // 設置註釋內容
        comment.setString(new HSSFRichTextString(commentText));
        // 設置註釋做者,當鼠標移動到單元格上是能夠在狀態欄中看到該內容.
        comment.setAuthor(commentName);
        return comment;
	}
	

	/**
	 * 圖片插入
	 */
	public static void createCellPicture(HSSFWorkbook workbook, HSSFPatriarch patriarch, String url, int col, int row) throws Exception{
		//先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
        BufferedImage bufferImg =null;
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        bufferImg = ImageIO.read(new File( url )); 
        ImageIO.write(bufferImg,"jpg",byteArrayOut);
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,1023, 255, (short) col, row, (short) col, row);
        anchor.setAnchorType(3);
        //插入圖片
        patriarch.createPicture(anchor , workbook.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
        byteArrayOut.flush();
        byteArrayOut.close();
	}

/**
	 * 導出EXCEL
	 */
	public static void excel(List<Map<String, Object>> list, String[] head, String excelName,HttpServletResponse response ) throws Exception{
		// 聲明一個工做薄
		HSSFWorkbook workbook = new HSSFWorkbook(); 
		// 生成一個表格
	    HSSFSheet sheet = workbook.createSheet(excelName); 
	    // 設置表格默認列寬度爲20個字節
        sheet.setDefaultColumnWidth(20);
        // 字體設置
        HSSFFont font = createCellFont(workbook);
        // 樣式設置
        HSSFCellStyle style = createCellStyle(workbook);
        // 把字體應用到當前的樣式
        style.setFont(font);
        // 聲明一個管理器,HSSFPatriarch是全部註釋的容器
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        // *產生表格標題行
        // 建立行(row)
        HSSFRow row = sheet.createRow(0);
        HSSFComment comment = createCellComment(patriarch, "這是標題行", "123");
        for (int i = 0; i < head.length; i++) {
        	// 建立單元格
        	HSSFCell cell = row.createCell(i);
        	// 獲取內容
        	HSSFRichTextString text = new HSSFRichTextString(head[i]);
        	// 設置單元格內容
        	cell.setCellValue(text);
        	// 設置單元格樣式
        	cell.setCellStyle(style);
        	// 指定單元格格式:數值、公式或字符串 
        	cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        	// 添加註釋
            cell.setCellComment(comment);
        }
        // *遍歷集合數據,產生表格數據行
	    for (int i=1, k=list.size()+1; i<k; i++) {
	    	// 建立新行(row)
	    	row = sheet.createRow(i);
	    	// 設置行高
	    	row.setHeightInPoints(60);
	    	// 設置圖片所在列寬度爲80px,
	    	sheet.setColumnWidth(i, (short)(35.7 * 80));
	    	comment = createCellComment(patriarch, "這是數據行", "123");
	    	for(int j =0;j<head.length;j++ ){
	    		// 建立單元格
	    		HSSFCell cell =row.createCell(j);
	    		// 獲取內容
	    		Map<String , Object> map=(Map<String, Object>) list.get(i-1);
	    		HSSFRichTextString text = new HSSFRichTextString(String.valueOf( map.get(String.valueOf(j)) ));
	    		cell.setCellStyle(style);
	    		cell.setCellValue(text);
	    		cell.setCellComment(comment);
	    		// 插圖片(6爲圖片列)
	    		// map.get(String.valueOf(j)).toString() 爲圖片絕對地址
	    		if(j==6){
	    			createCellPicture(workbook, patriarch, map.get(String.valueOf(j)).toString(), 6, i);
	    		}
	    	}
	    }
	    response.setContentType("applicationnd.ms-excel");
		String fileName = new String(excelName.getBytes("gb2312"),"ISO-8859-1");
		response.setHeader("Content-disposition", "attachment; filename="+fileName+".xls");
		workbook.write(response.getOutputStream());
		response.getOutputStream().flush();
		response.getOutputStream().close();
	}

//方法調用
public void excelTest(){
		try {
			List<User> list = userService.queryUserTest();
			List<Map<String, Object>> listBody = new ArrayList<Map<String, Object>>();
			for(User user:list){
				Map<String,Object> map = new HashMap<String, Object>();
				map.put("0", user.getUserId());
				map.put("1", user.getUserName());
				map.put("2", user.getTrueName());
				map.put("3", user.getPassWord());
				map.put("4", user.getDeptName());
				map.put("5", user.getJob());
				map.put("6", user.getUrl());
				listBody.add(map);
			}
			HttpServletResponse response = ServletActionContext.getResponse();
			String[] head ={"ID","用戶名","真實姓名","密碼","部門","工做","url"};
			ExcelUtil.excel2(listBody, head, "EXCEL", response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
相關文章
相關標籤/搜索