/** * 樣式設置 */ 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(); } }