HSSF使用

@RequestMapping(value = "downloadTaskListExcel", method = RequestMethod.GET)
public void downloadTaskListExcel(String projectNo, HttpServletResponse response) {
   if (!StringUtils.isEmpty(projectNo)) {
      ProjectInfo projectInfoQuery = new ProjectInfo();
      projectInfoQuery.setProjectNo(projectNo);
      ProjectInfo projectInfo = projectInfoService.get(projectInfoQuery);
      List<ConstPlan> constPlans = constPlanService.findPlanNameAndTaskStatusAndIocName(projectNo);
      Workbook workbook = projectInfoService.createTaskListExcel(constPlans);
      try {
         String fileName = projectInfo.getProjectName() + "-任务清单模板.xls";
         fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
         response.setContentType("application/octet-stream");
         response.setHeader("Content-disposition", "attachment;filename=" + fileName);
         response.flushBuffer();
         workbook.write(response.getOutputStream());
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

 

public abstract Workbook createTaskListExcel(List<ConstPlan> constPlans);

 

@Override
public Workbook createTaskListExcel(List<ConstPlan> constPlans) {
   HSSFWorkbook workbook = new HSSFWorkbook();
   HSSFCellStyle headerStyle = (HSSFCellStyle) workbook.createCellStyle();
   HSSFFont headerFont = (HSSFFont) workbook.createFont(); // 创建字体样式
   headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
   headerStyle.setFont(headerFont); // 为标题样式设置字体样式
   headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
   headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
   headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
   headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
   Map<String, List<ConstPlan>> map = new LinkedHashMap<>();
   for (ConstPlan constPlan : constPlans) {
      if (map.containsKey(constPlan.getParentId())) {
         List<ConstPlan> target = map.get(constPlan.getParentId());
         target.add(constPlan);
         map.put(constPlan.getParentId(), target);
      } else {
         List<ConstPlan> target = new ArrayList<>();
         target.add(constPlan);
         map.put(constPlan.getParentId(), target);
      }
   }
   System.out.println(JSON.toJSON(map));
      // 获取当前 map中的所有的key 值
   for (String string : map.keySet()) {
      //根据相应的id 来查出相应的上级计划的信息
      ConstPlan system = constPlanRepo.get(new ConstPlan(string));
      //以相应的计划名称生成相应的表单
      HSSFSheet sheet = workbook.createSheet(system.getName());
      //根据相应的一级计划查询出该计划下面所有的二级计划
      List<ConstPlan> childs = constPlanRepo.getChild(system.getId());
              //第一行的列名就是根据拼接以及查询出来的需要展示的信息名称
      List<String> headers = getHeads(childs);
              //根据相应的key值查询出当前的value 值
      List<ConstPlan> mapValue = map.get(string);
            //创建第一行
      HSSFRow row = sheet.createRow(0);
      for (int i = 0; i < headers.size(); i++) {
         //设置第一行中的单元格内容
         HSSFCell cell = row.createCell(i);
                 //获取出 当前list 中拼接的第(i+1)个元素,因为循环是从0开始的
           //把对应的 key 对应的 value 值转换成Excel 中的String  类型.
         HSSFRichTextString text = new HSSFRichTextString(headers.get(i));
         //设置出当前单元格的格式
         cell.setCellStyle(headerStyle);
         //设置当前单元格的value 值
         cell.setCellValue(text);
      }
              //查询出当前key 中的计划中的点位名称
      List<String> taskNames = getTaskName(mapValue);
      for (int i = 0; i < taskNames.size(); i++) {
         //根据查询出来的条数来生成行数
         HSSFRow rowN = sheet.createRow(i + 1);
         //生成的行数的第一个单元格填写入相应的序号数
         rowN.createCell(0).setCellValue(i + 1);
         //生成的行数的第二个单元格填入相应的点位名称
         rowN.createCell(1).setCellValue(taskNames.get(i));
         //下面的从第3个单元格开始
         for (int j = 2; j < headers.size(); j++) {
            //生成单元格
            HSSFCell cell = rowN.createCell(j);
            //对当前的key 下面的list 集合进行遍历
            for (ConstPlan constPlan : mapValue) {
                           //如果当前列名与计划名相等
               if (headers.get(j).equals(constPlan.getName())) {
                  //得到这个计划中的所有任务
                  List<ConstTask> constTasks = constPlan.getConstTasks();
                  // cell.setCellValue("X");
                  for (ConstTask constTask : constTasks) {
                     //如果任务的名称与点位名称相等
                     if (taskNames.get(i).equals(constTask.getName())) {
                        // cell.setCellValue(getValue(constTask.getStatus()));
                        cell.setCellValue(constTask.getStatus());
                        break;
                     }
                  }
                  break;
               }
            }
         }
      }
   }





   return workbook;
}

 

 

private List<String> getTaskName(List<ConstPlan> list) {
   List<String> locNames = new ArrayList<>();
   for (ConstPlan constPlan : list) {
      for (ConstTask constTask : constPlan.getConstTasks()) {
         if (!locNames.contains(constTask.getName())) {
            locNames.add(constTask.getName());
         }
      }
   }
   return locNames;
}

 

 

private List<String> getHeads(List<ConstPlan> constPlans) {
   List<String> headers = new ArrayList<>();
   headers.add("序号");
   headers.add("任务点位");
   for (ConstPlan constPlan : constPlans) {
      headers.add(constPlan.getName());
   }
   return headers;
}

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值