实现类: public MapdownLoadGuiHuaPathById(Integer id) throws IOException { Map mapModel = new HashMap<>(); if (id == null) { throw new ArgumentException("ID不能为空。"); } // 根据规划ID获取一级规划信息 TrGuiHua trGuiHua = trGuiHuaMapper.getGuiHuaById(id); Date startTime = trGuiHua.getStartTime(); Date endTime = trGuiHua.getEndTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); int startYear = Integer.parseInt(sdf.format(startTime)); int endYear = Integer.parseInt(sdf.format(endTime)); String sheetName = trGuiHua.getName(); mapModel.put("fileName", sheetName); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(sheetName); HSSFCellStyle cellStyle = createCellStyle(wb, (short) 11, true); // 处理表头第一行 HSSFRow row1 = sheet.createRow(0); HSSFCell cell11 = row1.createCell(0); cell11.setCellValue(sheetName); sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, ((((endYear-startYear)+1)*5))+6)); cell11.setCellStyle(cellStyle); // 处理表头第二行 HSSFRow row2 = sheet.createRow(1); HSSFCell cell21 = row2.createCell(0); cell21.setCellValue("专项规划"); CellRangeAddress cellRangeAddress = new CellRangeAddress(1, 2, 0, 0); sheet.addMergedRegion(cellRangeAddress); cell21.setCellStyle(cellStyle); HSSFCell cell22 = row2.createCell(1); cell22.setCellValue("规划"); sheet.addMergedRegion(new CellRangeAddress(1, 2, 1, 1)); cell22.setCellStyle(cellStyle); HSSFCell cell23 = row2.createCell(2); cell23.setCellValue("项目"); sheet.addMergedRegion(new CellRangeAddress(1, 1, 2, 6)); cell23.setCellStyle(cellStyle); // Cell cell24 = row2.createCell(3); // cell24.setCellValue("负责部门"); // Cell cell25 = row2.createCell(4); // cell25.setCellValue("目标"); // 处理表头第三行 HSSFRow row3 = sheet.createRow(2); String title1="编号,内容,负责部门,开始日期,结束日期,"; for (int i = startYear; i <=endYear ; i++) { title1+="编号,内容,负责部门,开始日期,结束日期,"; HSSFCell cell = row2.createCell((((i - startYear)+1)*5)+2); cell.setCellValue(i+""); CellRangeAddress region = new CellRangeAddress(1, 1, (((i - startYear)+1)*5)+2, (((i - startYear)+1)*5)+6); sheet.addMergedRegion(region); cell.setCellStyle(cellStyle); } title1=title1.substring(0,title1.length()-1); String[] split = title1.split(","); for (int i = 0; i trGuiHuaList = trGuiHuaMapper.getChildGuiHuaList(id,null); if (trGuiHuaList != null && trGuiHuaList.size() > 0) { int startRow = 3; // 专项规划开始行 int endRow = 3; // 专项规划结束行 for (int j = 0; j < trGuiHuaList.size(); j++) { TrGuiHua trGuiHuaZx = trGuiHuaList.get(j); Integer zXId = trGuiHuaZx.getId(); String zxName = trGuiHuaZx.getName(); // 获取专项规划下的子规划 List trGuiHuaChild = trGuiHuaMapper.getChildGuiHuaList(zXId,null); if (trGuiHuaChild != null && trGuiHuaChild.size() > 0) { int ghStartRow = startRow; // 子规划开始行 int ghEndRow = startRow; // 子规划结束行 for (int k = 0; k < trGuiHuaChild.size(); k++) { TrGuiHua trGuiHua1 = trGuiHuaChild.get(k); Integer childGuiHuaId = trGuiHua1.getId(); // 获取规划下的项目 List trProjectList = trGuiHuaMapper.getChildProjectList(childGuiHuaId); if (trProjectList != null && trProjectList.size() > 0) { int projectStartRow = ghStartRow; // 项目开始行 int projectEndRow = ghStartRow; // 项目结束行 for (int m = 0; m < trProjectList.size(); m++) { List projectTempList=new ArrayList<>(); TrProject trProject = trProjectList.get(m); Integer projectId = trProject.getId(); for (int l = startYear; l <= endYear; l++) { Integer initCell= ((((l - startYear) + 1) * 5) + 2); TrTargetDto trTargetDto = new TrTargetDto(); trTargetDto.setProjectId(projectId); trTargetDto.setFlag(1); trTargetDto.setTargetYear(l); List trTargetList = trTargetMapper.getTargetListByCon(trTargetDto); // StringBuffer stringBuffer = new StringBuffer(); if (trTargetList != null && trTargetList.size() > 0) { projectEndRow=projectStartRow+trTargetList.size(); ghEndRow=projectStartRow+trTargetList.size(); int targetStartRow = projectStartRow; endRow = targetStartRow + trTargetList.size()-3; for (int n = 0; n < trTargetList.size(); n++) { List targetTempList=new ArrayList<>(); TrTarget trTarget = trTargetList.get(n); targetTempList.add(n+1+""); targetTempList.add(trTarget.getTargetName()); targetTempList.add(trTarget.getManagerDeptName()); targetTempList.add(trTarget.getStartTime()==null?"":sim.format(trTarget.getStartTime())); targetTempList.add(trTarget.getEndTime()==null?"":sim.format(trTarget.getEndTime())); HSSFRow row = sheet.getRow(targetStartRow); if (row==null){ row = sheet.createRow(targetStartRow); } for (int i = 0; i < targetTempList.size(); i++) { HSSFCell cell = row.createCell( initCell+ i); cell.setCellValue(targetTempList.get(i)); cell.setCellStyle(cellStyle); } // stringBuffer.append(trTarget.getTargetName() + ";rn"); targetStartRow++; } }else { endRow++; if (sheet.getRow(projectStartRow)==null){ sheet.createRow(projectStartRow); } } // Cell cell = row.createCell((l - startYear) + 5); // cell.setCellValue(stringBuffer.toString()); } projectTempList.add(m+1+""); projectTempList.add(trProject.getProjectName()); projectTempList.add(trProject.getManagerDeptName()); projectTempList.add(trProject.getStartTime()==null?"":sim.format(trProject.getStartTime())); projectTempList.add(trProject.getEndTime()==null?"":sim.format(trProject.getEndTime())); HSSFRow row = sheet.getRow(projectStartRow); for (int i = 0; i projectStartRow) { CellRangeAddress region = new CellRangeAddress(projectStartRow, projectEndRow - 1, i + 2, i + 2); sheet.addMergedRegion(region); } cell.setCellStyle(cellStyle); } projectStartRow=projectEndRow; } } else { endRow++; sheet.createRow(ghStartRow); } // 处理子规划 HSSFRow row = sheet.getRow(ghStartRow); HSSFCell cell1 = row.createCell(1); cell1.setCellValue(trGuiHua1.getName()); // 处理一个子规划的合并 if (ghEndRow - 1 > ghStartRow) { CellRangeAddress region = new CellRangeAddress(ghStartRow, ghEndRow - 1, 1, 1); sheet.addMergedRegion(region); } cell1.setCellStyle(cellStyle); ghStartRow = ghEndRow; } } else { endRow++; sheet.createRow(startRow); } // 处理专项规划 HSSFRow row = sheet.getRow(startRow); HSSFCell cell0 = row.createCell(0); cell0.setCellValue(zxName); // 合并一个专项规划 if (endRow - 1 > startRow) { CellRangeAddress region = new CellRangeAddress(startRow, endRow - 1, 0, 0); sheet.addMergedRegion(region); } cell0.setCellStyle(cellStyle); startRow = endRow; } for (int i = 0; i <=endRow ; i++) { sheet.autoSizeColumn(i); sheet.setColumnWidth(i,sheet.getColumnWidth(i)*14/11); } } ByteArrayOutputStream baos = new ByteArrayOutputStream(); wb.write(baos); mapModel.put("data", baos); baos.close(); wb.close(); return mapModel; } //导出excel样式设置 private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontsize, boolean center) { // TODO Auto-generated method stub HSSFCellStyle style = workbook.createCellStyle(); // style.setBorderTop(BorderStyle.THIN); // style.setBorderBottom(BorderStyle.THIN); // style.setBorderLeft(BorderStyle.THIN); // style.setBorderRight(BorderStyle.THIN); //是否水平居中 if (center) { style.setAlignment(HorizontalAlignment.CENTER);//水平居中 }else { style.setAlignment(HorizontalAlignment.LEFT);//水平居中 } style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 //创建字体 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints(fontsize); //加载字体 style.setFont(font); style.setWrapText(true); return style; }
以上示例导出分为四个层级,可以按需求层级嵌套



