1 public ActionResult excelPrint() { 2 HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件 3 HSSFSheet sheet = workbook.createSheet();// 创建一个Excel的Sheet 4 sheet.createFreezePane(1, 3);// 冻结 5 // 设置列宽 6 sheet.setColumnWidth(0, 1000); 7 sheet.setColumnWidth(1, 3500); 8 sheet.setColumnWidth(2, 3500); 9 sheet.setColumnWidth(3, 6500); 10 sheet.setColumnWidth(4, 6500); 11 sheet.setColumnWidth(5, 6500); 12 sheet.setColumnWidth(6, 6500); 13 sheet.setColumnWidth(7, 2500); 14 // Sheet样式 15 HSSFCellStyle sheetStyle = workbook.createCellStyle(); 16 // 背景色的设定 17 sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 18 // 前景色的设定 19 sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 20 // 填充模式 21 sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS); 22 // 设置列的样式 23 for (int i = 0; i <= 14; i++) { 24 sheet.setDefaultColumnStyle((short) i, sheetStyle); 25 } 26 // 设置字体 27 HSSFFont headfont = workbook.createFont(); 28 headfont.setFontName("黑体"); 29 headfont.setFontHeightInPoints((short) 22);// 字体大小 30 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 31 // 另一个样式 32 HSSFCellStyle headstyle = workbook.createCellStyle(); 33 headstyle.setFont(headfont); 34 headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 35 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 36 headstyle.setLocked(true); 37 headstyle.setWrapText(true);// 自动换行 38 // 另一个字体样式 39 HSSFFont columnHeadFont = workbook.createFont(); 40 columnHeadFont.setFontName("宋体"); 41 columnHeadFont.setFontHeightInPoints((short) 10); 42 columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 43 // 列头的样式 44 HSSFCellStyle columnHeadStyle = workbook.createCellStyle(); 45 columnHeadStyle.setFont(columnHeadFont); 46 columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 47 columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 48 columnHeadStyle.setLocked(true); 49 columnHeadStyle.setWrapText(true); 50 columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框的颜色 51 columnHeadStyle.setBorderLeft((short) 1);// 边框的大小 52 columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右边框的颜色 53 columnHeadStyle.setBorderRight((short) 1);// 边框的大小 54 columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体 55 columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色 56 // 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式) 57 columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index); 58 59 HSSFFont font = workbook.createFont(); 60 font.setFontName("宋体"); 61 font.setFontHeightInPoints((short) 10); 62 // 普通单元格样式 63 HSSFCellStyle style = workbook.createCellStyle(); 64 style.setFont(font); 65 style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中 66 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中 67 style.setWrapText(true); 68 style.setLeftBorderColor(HSSFColor.BLACK.index); 69 style.setBorderLeft((short) 1); 70 style.setRightBorderColor(HSSFColor.BLACK.index); 71 style.setBorderRight((short) 1); 72 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体 73 style.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色. 74 style.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色. 75 // 另一个样式 76 HSSFCellStyle centerstyle = workbook.createCellStyle(); 77 centerstyle.setFont(font); 78 centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 79 centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 80 centerstyle.setWrapText(true); 81 centerstyle.setLeftBorderColor(HSSFColor.BLACK.index); 82 centerstyle.setBorderLeft((short) 1); 83 centerstyle.setRightBorderColor(HSSFColor.BLACK.index); 84 centerstyle.setBorderRight((short) 1); 85 centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体 86 centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色. 87 centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色. 88 89 try { 90 // 创建第一行 91 HSSFRow row0 = sheet.createRow(0); 92 // 设置行高 93 row0.setHeight((short) 900); 94 // 创建第一列 95 HSSFCell cell0 = row0.createCell(0); 96 cell0.setCellValue(new HSSFRichTextString("中非发展基金投资项目调度会工作落实情况对照表")); 97 cell0.setCellStyle(headstyle); 98 /** 99 * 合并单元格 100 * 第一个参数:第一个单元格的行数(从0开始) 101 * 第二个参数:第二个单元格的行数(从0开始) 102 * 第三个参数:第一个单元格的列数(从0开始) 103 * 第四个参数:第二个单元格的列数(从0开始) 104 */ 105 CellRangeAddress range = new CellRangeAddress(0, 0, 0, 7); 106 sheet.addMergedRegion(range); 107 // 创建第二行 108 HSSFRow row1 = sheet.createRow(1); 109 HSSFCell cell1 = row1.createCell(0); 110 cell1.setCellValue(new HSSFRichTextString("本次会议时间:2009年8月31日 前次会议时间:2009年8月24日")); 111 cell1.setCellStyle(centerstyle); 112 // 合并单元格 113 range = new CellRangeAddress(1, 2, 0, 7); 114 sheet.addMergedRegion(range); 115 // 第三行 116 HSSFRow row2 = sheet.createRow(3); 117 row2.setHeight((short) 750); 118 HSSFCell cell = row2.createCell(0); 119 cell.setCellValue(new HSSFRichTextString("责任者")); 120 cell.setCellStyle(columnHeadStyle); 121 cell = row2.createCell(1); 122 cell.setCellValue(new HSSFRichTextString("成熟度排序")); 123 cell.setCellStyle(columnHeadStyle); 124 cell = row2.createCell(2); 125 cell.setCellValue(new HSSFRichTextString("事项")); 126 cell.setCellStyle(columnHeadStyle); 127 cell = row2.createCell(3); 128 cell.setCellValue(new HSSFRichTextString("前次会议要求/n/新项目的项目概要")); 129 cell.setCellStyle(columnHeadStyle); 130 cell = row2.createCell(4); 131 cell.setCellValue(new HSSFRichTextString("上周工作进展")); 132 cell.setCellStyle(columnHeadStyle); 133 cell = row2.createCell(5); 134 cell.setCellValue(new HSSFRichTextString("本周工作计划")); 135 cell.setCellStyle(columnHeadStyle); 136 cell = row2.createCell(6); 137 cell.setCellValue(new HSSFRichTextString("问题和建议")); 138 cell.setCellStyle(columnHeadStyle); 139 cell = row2.createCell(7); 140 cell.setCellValue(new HSSFRichTextString("备 注")); 141 cell.setCellStyle(columnHeadStyle); 142 // 访问数据库,得到数据集 143 List<DeitelVO> deitelVOList = getEntityManager().queryDeitelVOList(); 144 int m = 4; 145 int k = 4; 146 for (int i = 0; i < deitelVOList.size(); i++) { 147 DeitelVO vo = deitelVOList.get(i); 148 String dname = vo.getDname(); 149 List<Workinfo> workList = vo.getWorkInfoList(); 150 HSSFRow row = sheet.createRow(m); 151 cell = row.createCell(0); 152 cell.setCellValue(new HSSFRichTextString(dname)); 153 cell.setCellStyle(centerstyle); 154 // 合并单元格 155 range = new CellRangeAddress(m, m + workList.size() - 1, 0, 0); 156 sheet.addMergedRegion(range); 157 m = m + workList.size(); 158 159 for (int j = 0; j < workList.size(); j++) { 160 Workinfo w = workList.get(j); 161 // 遍历数据集创建Excel的行 162 row = sheet.getRow(k + j); 163 if (null == row) { 164 row = sheet.createRow(k + j); 165 } 166 cell = row.createCell(1); 167 cell.setCellValue(w.getWnumber()); 168 cell.setCellStyle(centerstyle); 169 cell = row.createCell(2); 170 cell.setCellValue(new HSSFRichTextString(w.getWitem())); 171 cell.setCellStyle(style); 172 cell = row.createCell(3); 173 cell.setCellValue(new HSSFRichTextString(w.getWmeting())); 174 cell.setCellStyle(style); 175 cell = row.createCell(4); 176 cell.setCellValue(new HSSFRichTextString(w.getWbweek())); 177 cell.setCellStyle(style); 178 cell = row.createCell(5); 179 cell.setCellValue(new HSSFRichTextString(w.getWtweek())); 180 cell.setCellStyle(style); 181 cell = row.createCell(6); 182 cell.setCellValue(new HSSFRichTextString(w.getWproblem())); 183 cell.setCellStyle(style); 184 cell = row.createCell(7); 185 cell.setCellValue(new HSSFRichTextString(w.getWremark())); 186 cell.setCellStyle(style); 187 } 188 k = k + workList.size(); 189 } 190 // 列尾 191 int footRownumber = sheet.getLastRowNum(); 192 HSSFRow footRow = sheet.createRow(footRownumber + 1); 193 HSSFCell footRowcell = footRow.createCell(0); 194 footRowcell.setCellValue(new HSSFRichTextString(" 审 定:XXX 审 核:XXX 汇 总:XX")); 195 footRowcell.setCellStyle(centerstyle); 196 range = new CellRangeAddress(footRownumber + 1, footRownumber + 1, 0, 7); 197 sheet.addMergedRegion(range); 198 199 HttpServletResponse response = getResponse(); 200 HttpServletRequest request = getRequest(); 201 String filename = "未命名.xls";//设置下载时客户端Excel的名称 202 // 请见:http://zmx.javaeye.com/blog/622529 203 filename = Util.encodeFilename(filename, request); 204 response.setContentType("application/vnd.ms-excel"); 205 response.setHeader("Content-disposition", "attachment;filename=" + filename); 206 OutputStream ouputStream = response.getOutputStream(); 207 workbook.write(ouputStream); 208 ouputStream.flush(); 209 ouputStream.close(); 210 211 } catch (Exception e) { 212 e.printStackTrace(); 213 } 214 return null; 215 }