实现类:
public Map<String, Object> downLoadGuiHuaPathById(Integer id) throws IOException {
Map<String, Object> 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 <split.length ; i++) {
HSSFCell cell = row3.createCell(i + 2);
cell.setCellValue(split[i]);
cell.setCellStyle(cellStyle);
}
// int i = 1;
// for (int l = startYear; l <= endYear; l++) {
// Cell cell2 = row2.createCell(4 + i);
// cell2.setCellValue(l);
// i++;
// }
//
// // 合并表头
// CellRangeAddress regionTh = new CellRangeAddress(0, 0, 0, 4 + i - 1);
// sheet.addMergedRegion(regionTh);
// 获取一级规划的下级规划
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd");
List<TrGuiHua> 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<TrGuiHua> 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<TrProject> 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<String> 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<TrTarget> 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<String> 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() + ";\r\n");
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 <projectTempList.size() ; i++) {
HSSFCell cell = row.createCell(i + 2);
cell.setCellValue(projectTempList.get(i));
if (projectEndRow - 1 > 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;
}
以上示例导出分为四个层级,可以按需求层级嵌套
本文详细介绍了使用Java的POI库如何在导出Excel时进行单元格合并,适用于多层级数据结构的展示需求,提供了一种高效的方法来处理复杂的Excel导出问题。
1779

被折叠的 条评论
为什么被折叠?



