第一件事,從網上下一個poi包然後匯入到myeclipse。
然後代碼:
public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 建立一個Excel檔案 HSSFSheet sheet = workbook.createSheet();// 建立一個Excel的Sheet sheet.createFreezePane(1, 3);// 凍結 // 設定列寬 sheet.setColumnWidth(0, 1000); sheet.setColumnWidth(1, 3500); sheet.setColumnWidth(2, 3500); sheet.setColumnWidth(3, 6500); sheet.setColumnWidth(4, 6500); sheet.setColumnWidth(5, 6500); sheet.setColumnWidth(6, 6500); sheet.setColumnWidth(7, 2500); // Sheet樣式 HSSFCellStyle sheetStyle = workbook.createCellStyle(); // 背景色的設定 sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); // 前景色彩的設定 sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 填充模式 sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS); // 設定列的樣式 for (int i = 0; i <= 14; i++) { sheet.setDefaultColumnStyle((short) i, sheetStyle); } // 設定字型 HSSFFont headfont = workbook.createFont(); headfont.setFontName("黑體"); headfont.setFontHeightInPoints((short) 22);// 字型大小 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 // 另一個樣式 HSSFCellStyle headstyle = workbook.createCellStyle(); headstyle.setFont(headfont); headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右置中 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下置中 headstyle.setLocked(true); headstyle.setWrapText(true);// 自動換行 // 另一個字型樣式 HSSFFont columnHeadFont = workbook.createFont(); columnHeadFont.setFontName("宋體"); columnHeadFont.setFontHeightInPoints((short) 10); columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 列頭的樣式 HSSFCellStyle columnHeadStyle = workbook.createCellStyle(); columnHeadStyle.setFont(columnHeadFont); columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右置中 columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下置中 columnHeadStyle.setLocked(true); columnHeadStyle.setWrapText(true); columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左邊框的顏色 columnHeadStyle.setBorderLeft((short) 1);// 邊框的大小 columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右邊框的顏色 columnHeadStyle.setBorderRight((short) 1);// 邊框的大小 columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設定儲存格的邊框為粗體 columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設定儲存格的邊框顏色 // 設定儲存格的背景顏色(儲存格的樣式會覆蓋列或行的樣式) columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index); HSSFFont font = workbook.createFont(); font.setFontName("宋體"); font.setFontHeightInPoints((short) 10); // 普通儲存格樣式 HSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右置中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下置中 style.setWrapText(true); style.setLeftBorderColor(HSSFColor.BLACK.index); style.setBorderLeft((short) 1); style.setRightBorderColor(HSSFColor.BLACK.index); style.setBorderRight((short) 1); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設定儲存格的邊框為粗體 style.setBottomBorderColor(HSSFColor.BLACK.index); // 設定儲存格的邊框顏色. style.setFillForegroundColor(HSSFColor.WHITE.index);// 設定儲存格的背景顏色. // 另一個樣式 HSSFCellStyle centerstyle = workbook.createCellStyle(); centerstyle.setFont(font); centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右置中 centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下置中 centerstyle.setWrapText(true); centerstyle.setLeftBorderColor(HSSFColor.BLACK.index); centerstyle.setBorderLeft((short) 1); centerstyle.setRightBorderColor(HSSFColor.BLACK.index); centerstyle.setBorderRight((short) 1); centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設定儲存格的邊框為粗體 centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設定儲存格的邊框顏色. centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 設定儲存格的背景顏色. try { // 建立第一行 HSSFRow row0 = sheet.createRow(0); // 設定行高 row0.setHeight((short) 900); // 建立第一列 HSSFCell cell0 = row0.createCell(0); cell0.setCellValue(new HSSFRichTextString("中非發展基金投資項目調度會工作落實情況對照表")); cell0.setCellStyle(headstyle); /** * 合併儲存格 * 第一個參數:第一個儲存格的行數(從0開始) * 第二個參數:第二個儲存格的行數(從0開始) * 第三個參數:第一個儲存格的列數(從0開始) * 第四個參數:第二個儲存格的列數(從0開始) */ CellRangeAddress range = new CellRangeAddress(0, 0, 0, 7); sheet.addMergedRegion(range); // 建立第二行 HSSFRow row1 = sheet.createRow(1); HSSFCell cell1 = row1.createCell(0); cell1.setCellValue(new HSSFRichTextString("本次會議時間:2009年8月31日 前次會議時間:2009年8月24日")); cell1.setCellStyle(centerstyle); // 合併儲存格 range = new CellRangeAddress(1, 2, 0, 7); sheet.addMergedRegion(range); // 第三行 HSSFRow row2 = sheet.createRow(3); row2.setHeight((short) 750); HSSFCell cell = row2.createCell(0); cell.setCellValue(new HSSFRichTextString("責任者")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(1); cell.setCellValue(new HSSFRichTextString("成熟度等級排序")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(2); cell.setCellValue(new HSSFRichTextString("事項")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(3); cell.setCellValue(new HSSFRichTextString("前次會議要求\n/新項目的項目概要")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(4); cell.setCellValue(new HSSFRichTextString("上周工作進展")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(5); cell.setCellValue(new HSSFRichTextString("本周工作計劃")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(6); cell.setCellValue(new HSSFRichTextString("問題和建議")); cell.setCellStyle(columnHeadStyle); cell = row2.createCell(7); cell.setCellValue(new HSSFRichTextString("備 注")); cell.setCellStyle(columnHeadStyle); // 訪問資料庫,得到資料集 List<DeitelVO> deitelVOList = getEntityManager().queryDeitelVOList(); int m = 4; int k = 4; for (int i = 0; i < deitelVOList.size(); i++) { DeitelVO vo = deitelVOList.get(i); String dname = vo.getDname(); List<Workinfo> workList = vo.getWorkInfoList(); HSSFRow row = sheet.createRow(m); cell = row.createCell(0); cell.setCellValue(new HSSFRichTextString(dname)); cell.setCellStyle(centerstyle); // 合併儲存格 range = new CellRangeAddress(m, m + workList.size() - 1, 0, 0); sheet.addMergedRegion(range); m = m + workList.size(); for (int j = 0; j < workList.size(); j++) { Workinfo w = workList.get(j); // 遍曆資料集建立Excel的行 row = sheet.getRow(k + j); if (null == row) { row = sheet.createRow(k + j); } cell = row.createCell(1); cell.setCellValue(w.getWnumber()); cell.setCellStyle(centerstyle); cell = row.createCell(2); cell.setCellValue(new HSSFRichTextString(w.getWitem())); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue(new HSSFRichTextString(w.getWmeting())); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue(new HSSFRichTextString(w.getWbweek())); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue(new HSSFRichTextString(w.getWtweek())); cell.setCellStyle(style); cell = row.createCell(6); cell.setCellValue(new HSSFRichTextString(w.getWproblem())); cell.setCellStyle(style); cell = row.createCell(7); cell.setCellValue(new HSSFRichTextString(w.getWremark())); cell.setCellStyle(style); } k = k + workList.size(); } // 列尾 int footRownumber = sheet.getLastRowNum(); HSSFRow footRow = sheet.createRow(footRownumber + 1); HSSFCell footRowcell = footRow.createCell(0); footRowcell.setCellValue(new HSSFRichTextString(" 審 定:XXX 審 核:XXX 匯 總:XX")); footRowcell.setCellStyle(centerstyle); range = new CellRangeAddress(footRownumber + 1, footRownumber + 1, 0, 7); sheet.addMergedRegion(range); HttpServletResponse response = getResponse(); HttpServletRequest request = getRequest(); String filename = "未命名.xls";//設定下載時用戶端Excel的名稱 // 請見:http://zmx.iteye.com/blog/622529 filename = Util.encodeFilename(filename, request); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + filename); OutputStream ouputStream = response.getOutputStream(); workbook.write(ouputStream); ouputStream.flush(); ouputStream.close(); } catch (Exception e) { e.printStackTrace(); } return null; }
另外一個例子:
在一個jsp頁面有一個按鈕作匯出excel按鈕
<button onclick = window.open('../toexcel/Yuyingeverymtoexcel.jsp?yearn=<%yearn%>&monthn=<%monthn%>&typesql=<%typesql%>&num=Math.random()')>匯出到excel</button>
然後是Yunyingeverymtoexcel.jsp
<%@ page contentType="application/vnd.ms-excel; charset=utf-8"
這個是要改的。
下面作為匯出命名用。
String name = new String("統計表3".getBytes(), "ISO8859-1");response.setHeader("Content-disposition","attachment; filename="+name+time+".xls");
下面就是匯出excel了。
Yunyingeverymtoexcel we = new Yunyingeverymtoexcel();we.getExcel("111.xls", response.getOutputStream(),yearn,monthn);
下面就是Yunyingeverymtoexcel .java 裡的一些代碼
設定儲存格格式
//設定儲存格置中HSSFCellStyle cs0 = wb.createCellStyle();cs0.setAlignment(HSSFCellStyle.ALIGN_CENTER); //左右置中 cs0.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
設定儲存格置中加邊框
HSSFCellStyle cs = wb.createCellStyle();cs.setAlignment(HSSFCellStyle.ALIGN_CENTER); //左右置中 cs.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);cs.setBorderTop(HSSFCellStyle.BORDER_THIN);cs.setLeftBorderColor(HSSFColor.BLACK.index);cs.setBorderLeft((short) 1); cs.setRightBorderColor(HSSFColor.BLACK.index); cs.setBorderRight((short) 1); cs.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設定儲存格的邊框為粗體
設定字型
// 設定字型//標題1 HSSFFont font = wb.createFont(); font.setFontHeightInPoints(( short ) 20 ); // 字型高度 // font.setColor(HSSFFont.COLOR_BLACK); // 字型顏色 font.setFontName("宋體"); // 字型 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 寬度 // font.setItalic( true ); // 是否使用斜體
儲存格賦值和格式
// 設定字型//標題1 HSSFFont font = wb.createFont(); font.setFontHeightInPoints(( short ) 20 ); // 字型高度 // font.setColor(HSSFFont.COLOR_BLACK); // 字型顏色 font.setFontName("宋體"); // 字型 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 寬度 // font.setItalic( true ); // 是否使用斜體