// 从数据库中提取数据保存到Excel中 public void downExcel(HttpServletResponse response, List fwmxList, String fileName) throws Exception { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("用户访问明细"); // 设置公式自动计算 // sheet.setForceFormulaRecalculation(true); // 设置单元格下边框 HSSFCellStyle style1 = workbook.createCellStyle(); style1.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格上边框 HSSFCellStyle style2 = workbook.createCellStyle(); style2.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置单元格宽度 sheet.setColumnWidth(0, 4000); sheet.setColumnWidth(1, 3000); HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue("访问时间"); cell.setCellStyle(style1); cell = row.createCell(1); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue("访问人数"); cell.setCellStyle(style1); int size = fwmxList.size() + 1, totalCount = 0; for (int i = 1; i < size; i++) { row = sheet.createRow(i); Map mapRow = (Map) fwmxList.get(i - 1); cell = row.createCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(mapRow.get("TIME").toString()); cell = row.createCell(1); cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); int count = Integer.parseInt(mapRow.get("SJ_Z").toString()); cell.setCellValue(count); totalCount += count; } row = sheet.createRow(size); cell = row.createCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue("访问总数"); cell.setCellStyle(style2); cell = row.createCell(1); cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); // String strFormula = "sum(B2:B" + size + ")";// 设置求和公式 // cell.setCellFormula(strFormula); cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellValue(totalCount); cell.setCellStyle(style2); row = sheet.createRow(size + 1); cell = row.createCell(0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue("平均访问数"); cell = row.createCell(1); // cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); // strFormula = "rounddown(average(B2:B" + size + "),0)";// 设置求平均值与取整数公式 // cell.setCellFormula(strFormula); cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellValue(totalCount / (size - 1)); // 将内容保存到文件fileName中 OutputStream outputStream = null; File file = new File(fileName); // System.out.println(file.getAbsolutePath()); outputStream = new FileOutputStream(fileName); workbook.write(outputStream); outputStream.flush(); outputStream.close(); // 下载设置 response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8")); // response.setHeader("Content-Disposition", "attachment;filename=" // + URLEncoder.encode(fileName, "UTF-8")); // response.setContentType("application/msexcel;charset=UTF-8");// // 文件名为中文,设置编码为UTF-8 response.setContentType("application/vnd.ms-excel;charset=utf-8"); ServletOutputStream servletOutputStream = response.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; bis = new BufferedInputStream(new FileInputStream(fileName)); bos = new BufferedOutputStream(servletOutputStream); byte[] buff = new byte[2048]; int buffLen = -1; while ((buffLen = bis.read(buff, 0, buff.length)) != -1) { bos.write(buff, 0, buffLen); } bos.close(); bis.close(); file.delete(); }