Java导出Excel(有数据库导出代码)
2017-04-28 10:27
417 查看
/** * 导出 * @param request * @param response * @throws Exception */ @SuppressWarnings("unchecked") @RequestMapping(value="vehicleMaintainExport.do") public void exportVehicleMaintain(HttpServletRequest request, HttpServletResponse response) throws Exception{ String param = request.getParameter("param"); JSONObject jsonObject = JSONObject.fromObject(param); VehicleMaintainVo vehicleMaintainVo = (VehicleMaintainVo) JSONObject.toBean(jsonObject, VehicleMaintainVo.class); String date = DateUtil.format(new Date(), DateUtil.YYYYMMDD); // 获取输出文件的名字 String displayName = PropertiesManager.getProperty("export.vehicleMaintain.fileName")+date+".xls"; response.setContentType("application/vnd.ms-excel"); BufferedOutputStream out = null; // 进行转码,使其支持中文文件名 response.addHeader("Content-Disposition", "attachment;filename=" + new String(displayName.getBytes("UTF-8"), "iso-8859-1")); try { // 获取输出流 out = new BufferedOutputStream(response.getOutputStream()); } catch (FileNotFoundException e1) { log.error(e1); } // 获取表格的表头字段名称 String gridHead = PropertiesManager.getProperty("export.vehicleMaintain.columnNames"); // 获取字段变量的名字 String fieldNames = PropertiesManager.getProperty("export.vehicleMaintain.fieldNames"); // 创建Excel HSSFWorkbook wb = new HSSFWorkbook(); // 生成工作薄sheet(包含头信息) HSSFSheet mainSheet = this.generateSheet(wb, displayName, gridHead); // 设置数据样式 HSSFCellStyle normalDataStyle = wb.createCellStyle(); normalDataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 用户查询出来的总记录 long total = this.getTotal(); // 计算需要分批查询的次数 int eachQuerySize = Integer.parseInt(PropertiesManager.getProperty("export.excel.book.maxSheet")); int no = (int) total / eachQuerySize + 1; vehicleMaintainVo.setPageSize((int) total); // 追加数据时,第几行 int rowNum = 0; // 一行时,第几个单元格 int num = 0; // 当前记录的数目 int currentRecordNum = 0; int sheetNameIndex = 2; int maxRow = Integer.parseInt(PropertiesManager.getProperty("export.excel.sheet.maxRow")); for(int n=1;n<=no;n++){ vehicleMaintainVo.setPage(n); Page page = vehicleMaintainService.pageQuery(vehicleMaintainVo); List<VehicleMaintain>list = (List<VehicleMaintain>) page.getRows(); for(VehicleMaintain vm:list){ vm.setDeleteFlag(vm.getDeleteFlag().equals("0")?"未删除":"已删除"); if (currentRecordNum > maxRow) { mainSheet = this.generateSheet(wb, displayName + sheetNameIndex, gridHead); sheetNameIndex++; currentRecordNum = 0; rowNum = 0; } currentRecordNum++; num = 0; HSSFRow row = mainSheet.getRow(1 + rowNum); if (row == null) { row = mainSheet.createRow(1 + rowNum); } // Insert data for (String field : fieldNames.split(",")) { HSSFCell cell = row.getCell(num); if (cell == null) { cell = row.createCell(num); } cell.setCellStyle(normalDataStyle); Field f = VehicleMaintain.class.getDeclaredField(field); f.setAccessible(true); Object value = f.get(vm); this.setCellValue(cell, value); num++; } rowNum++; } } try { wb.write(out); out.flush(); } catch (Exception e) { log.error(e); }finally{ try { out.close(); JCDFWebUtil.Log(request, "导出车辆安装维护,参数为:"+param); } catch (IOException e) { log.error(e); } } } /** * 获取sheet * * @param wb * @param sheetName 表格工作薄的名字 * @param gridHead 表格的表头字段名称 * @return */ private HSSFSheet generateSheet(HSSFWorkbook wb, String sheetName, String gridHead) { // 判断表头信息是否为空 if (null == gridHead) { throw new RuntimeException("表头信息为空,无法导出!"); } HSSFSheet mainSheet = wb.createSheet(sheetName); // 设置标题sheet信息的样式 HSSFFont headFont = wb.createFont(); headFont.setFontHeightInPoints((short) 20); headFont.setColor(HSSFFont.COLOR_RED); HSSFCellStyle headStyle = wb.createCellStyle(); headStyle.setFont(headFont); // 设置头信息的样式 HSSFFont titleFont = wb.createFont(); titleFont.setFontHeightInPoints((short) 8); titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); titleFont.setColor(HSSFFont.COLOR_NORMAL); HSSFCellStyle headerStyle = wb.createCellStyle(); headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); headerStyle.setFont(titleFont); String[] gridList = gridHead.split(","); // 创建第一行 HSSFRow headRow = mainSheet.createRow(0); // 在第一行中添加头信息数据 int num = 0; for (int i = 0; i < gridList.length; i++) { String column = gridList[i]; // 创建单元格 HSSFCell headCell = headRow.createCell(num); HSSFRichTextString h = new HSSFRichTextString(column); headCell.setCellValue(h); headCell.setCellStyle(headerStyle); int columnWidth = 100; mainSheet.setColumnWidth(num, columnWidth * 30); num++; } return mainSheet; } private void setCellValue(HSSFCell cell, Object value) { if (value instanceof java.lang.String) { cell.setCellValue(new HSSFRichTextString(value.toString())); } else if (value instanceof java.lang.Number) { cell.setCellValue(Double.parseDouble(value.toString())); } else if (value instanceof java.lang.Boolean) { cell.setCellValue(Boolean.parseBoolean(value.toString())); } else if (value instanceof java.util.Date) { cell.setCellValue(DateUtil.format((Date) value,DateUtil.YYYY_MM_DD)); } else { cell.setCellValue(""); } }
相关文章推荐
- Java导出数据库查询结果为excel和csv的对比
- JAVA POI 导出EXCEL: 代码中不需关心excel样式格式的实现思路 (反射)
- java导出数据到excel里:直接导出和导出数据库数据
- JAVA实现数据库数据导入/导出到Excel(POI)
- Java实现Excel导入数据库,数据库中数据导出Excel表
- JAVA实现在数据库导出到EXCEL并下载
- java poi实现数据库数据导出到excel
- java excel导出模板代码
- Java实现数据库数据导出到Excel中并下载到浏览器本地
- 用java将Excel表格导入导出数据库
- 用Java代码将excel中的数据导入到数据库中
- Java中用JXL导出Excel代码详解
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
- Java代码将数据导出到Excel
- java读取Excel导出Html对应的table代码
- Java操作Excel(二)将数据库中的数据导出到Excel中
- java使用poi从数据库导出Excel
- jsf中用java代码把一个list的内容导出到本地excel
- 空间复杂度,实现从excel导出到txt文件中的java代码自动构建,逻辑条件不同实现则不同
- java 通过Apache poi导出excel代码demo实例