Springmvc 和 poi3.9 用java程序從數據庫導出數據到excel(在博客園的第一篇原創博客)java
@RequestMapping(value = "/importexcel.htm", method = RequestMethod.GET) public ModelAndView _importExcel(HttpServletRequest request, HttpServletResponse response, Integer cId) throws Exception { // 得到要導出的數據集 List<Map<String, Object>> list = d_ExchangeCodeService.selectExcelRecord(cId); // 建立excel工做簿 Workbook wb = new HSSFWorkbook(); // 建立第一個sheet(頁),並命名 Sheet sheet = wb.createSheet(list.get(0).get("NAME").toString()); // 手動設置列寬。第一個參數表示要爲第幾列設;,第二個參數表示列的寬度,n爲列高的像素數。 sheet.setColumnWidth((short) 0, (short) (35.7 * 150)); sheet.setColumnWidth((short) 1, (short) (35.7 * 150)); sheet.setColumnWidth((short) 2, (short) (35.7 * 150)); sheet.setColumnWidth((short) 3, (short) (35.7 * 100)); sheet.setColumnWidth((short) 4, (short) (35.7 * 250)); sheet.setColumnWidth((short) 5, (short) (35.7 * 150)); sheet.setColumnWidth((short) 6, (short) (35.7 * 150)); // 建立第一行 Row row = sheet.createRow((short) 0); // 建立兩種單元格格式 CellStyle cs = wb.createCellStyle(); CellStyle cs2 = wb.createCellStyle(); // DataFormat df = wb.createDataFormat(); // 建立兩種字體 Font f = wb.createFont(); Font f2 = wb.createFont(); // 建立第一種字體樣式 f.setFontHeightInPoints((short) 10); f.setColor(IndexedColors.RED.getIndex()); f.setBoldweight(Font.BOLDWEIGHT_BOLD); // 建立第二種字體樣式 f2.setFontHeightInPoints((short) 10); f2.setColor(IndexedColors.BLACK.getIndex()); f2.setBoldweight(Font.BOLDWEIGHT_BOLD); // 設置第一種單元格的樣式 cs.setFont(f); cs.setBorderLeft(CellStyle.BORDER_THIN); cs.setBorderRight(CellStyle.BORDER_THIN); cs.setBorderTop(CellStyle.BORDER_THIN); cs.setBorderBottom(CellStyle.BORDER_THIN); // cs.setDataFormat(df.getFormat("#,##0.0")); // 設置第二種單元格的樣式 cs2.setFont(f2); cs2.setBorderLeft(CellStyle.BORDER_THIN); cs2.setBorderRight(CellStyle.BORDER_THIN); cs2.setBorderTop(CellStyle.BORDER_THIN); cs2.setBorderBottom(CellStyle.BORDER_THIN); // cs2.setDataFormat(df.getFormat("text")); // 建立列(每行裏的單元格) Cell cell = row.createCell(0); cell.setCellValue("用戶名"); cell.setCellStyle(cs); cell = row.createCell(1); cell.setCellValue("訂單號"); cell.setCellStyle(cs); cell = row.createCell(2); cell.setCellValue("兌換券序列號"); cell.setCellStyle(cs); cell = row.createCell(3); cell.setCellValue("兌換券金額"); cell.setCellStyle(cs); cell = row.createCell(4); cell.setCellValue("兌換券類型名稱"); cell.setCellStyle(cs); cell = row.createCell(5); cell.setCellValue("使用時間"); cell.setCellStyle(cs); cell = row.createCell(6); cell.setCellValue("使用結束日期"); cell.setCellStyle(cs); DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); for (short i = 0; i < list.size(); i++) { // Row 行,Cell 方格 , Row 和 Cell 都是從0開始計數的 // 建立一行,在頁sheet上 row = sheet.createRow((short) i + 1); // 在row行上建立一個方格 cell = row.createCell(0); cell.setCellValue(list.get(i).get("usr_UserID") == null ? "未使用" : list.get(i).get("usr_UserID").toString()); cell.setCellStyle(cs2); cell = row.createCell(1); cell.setCellValue(list.get(i).get("ord_OrderID") == null ? "未使用" : list.get(i).get("ord_OrderID").toString()); cell.setCellStyle(cs2); cell = row.createCell(2); cell.setCellValue(list.get(i).get("Account").toString()); cell.setCellStyle(cs2); cell = row.createCell(3); cell.setCellValue(Double.parseDouble(list.get(i).get("Amount").toString())); cell.setCellStyle(cs2); cell = row.createCell(4); cell.setCellValue(list.get(i).get("NAME").toString()); cell.setCellStyle(cs2); cell = row.createCell(5); cell.setCellValue(list.get(i).get("UsedTime") == null ? "未使用" : df.format(list.get(i).get("UsedTime")).toString()); cell.setCellStyle(cs2); cell = row.createCell(6); cell.setCellValue(df.format(list.get(i).get("BlankOutTime")).toString()); cell.setCellStyle(cs2); } ByteArrayOutputStream os = new ByteArrayOutputStream(); try { wb.write(os); } catch (IOException e) { e.printStackTrace(); } byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); // 設置response參數,能夠打開下載頁面 response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((list.get(0).get("NAME").toString() + ".xls").getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(is); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; // Simple read/write loop. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (final IOException e) { throw e; } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); } return null; }