Java导出excel时合并同一列中相同内容的行思路详解

 更新时间:2018年06月07日 14:36:41   作者:HPUCL  
这篇文章主要介绍了Java导出excel时合并同一列中相同内容的行,需要的朋友可以参考下

一、有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图:

要实现这个也不难,

思路如下:按照大类来循环,如上就是按照张江校区、徐汇校区、临港校区三个大类循环,然后再处理小类,因为本例小小类不涉及合并,所以只涉及处理小类,如果需要处理小小类,还需要在处理一下,具体实现原理同小类;

      每次循环时记录下此次循环的房屋类型和上次循环的房屋类型,两者相同时,要合并的结束行++,否者,说明这个房屋类型已经循环完毕(前提是各类型都按顺序order by 了,保证相同类型相邻),开始融合。具体实现如下:

二、实现代码,具体思路已经在注释中了

 public void expStatistics(String filePath,String campuscode) {
    try {
      WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
      JxlFormatUtil Jfu = new JxlFormatUtil();
      WritableSheet ws = wwb.createSheet("房屋报表统计", 0);
      String[] tableHead = {"校区名称:20","房屋类型:30","房屋用途:30","使用面积(㎡):20"};
      for (int i = 0; i < tableHead.length; i++) {//每一列的标题样式
        ws.addCell(new Label(i, 0, tableHead[i].split(":")[0], JxlFormatUtil.wcHead));
        ws.setColumnView(i, Integer.valueOf(tableHead[i].split(":")[1]));
      }
      int col = 1;//从第1行开始
      //以下变量用来融合相同内容 的行
      int perCol = col;
      String perPurpose = "";//上一个用途类型
      String purpose = "";//当前用途类型
      int startMergeCol = 1;//要融合的第一行
      int endMergeCol = 0;//要融合的最后行
      boolean flag = true;//用来记录是否是第一次循环
      //根据搜索条件导出
      List<FcxtCampus> campusList = new ArrayList<FcxtCampus>();
      if(null != campuscode && !"".equals(campuscode)){
        campusList = campusdao.findCampusByCode(campuscode);
      }else {
        campusList =campusdao.findCampus();
      }
      for (FcxtCampus campus : campusList) {
        List<FcxtBuild> builds = builddao.statisticsBuilds(campus.getCampuscode());//获取所有房屋信息
        if(null != builds && builds.size() > 0){
          for (FcxtBuild build : builds) {
            int row = 0;//从第0列开始
            ws.addCell(new Label(row++, col, campus.getCampusname(), JxlFormatUtil.wcCenter));
            purpose = build.getUsefulpurpose();
            if(flag){//如果是第一次循环,将perPurpose初始化,以便后面的第一次判断
              perPurpose = purpose;
              flag = false;
            }
            ws.addCell(new Label(row++, col, FcxtBuild.BUILD_USEFULPURPOSE.get(build.getUsefulpurpose()), JxlFormatUtil.wcCenter));
            if(purpose.equals(perPurpose)){
              endMergeCol++;
            }else{//两者不相同时,融合之前相同的行
              ws.mergeCells(1, startMergeCol, 1, endMergeCol);
              startMergeCol = col;
              endMergeCol = startMergeCol;
              perPurpose = purpose;
            }
            ws.addCell(new Label(row++, col, FcxtBuild.BUILD_BUILDINGTYPE.get(build.getBuildingtype()), JxlFormatUtil.wcCenter));
            ws.addCell(new Label(row++, col, build.getBuildarea().toString(), JxlFormatUtil.wcCenter));
            col++;
          }
          ws.mergeCells(0, perCol, 0, col-1);
          perCol = col;
        }
      }
      wwb.write();
      wwb.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

总结

以上所述是小编给大家介绍的Java导出excel时合并同一列中相同内容的行思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 一文带你了解Spring的Bean初始化过程和生命周期

    一文带你了解Spring的Bean初始化过程和生命周期

    Spring的核心功能有三点IOC、DI、AOP,IOC则是基础,也是Spring功能的最核心的点之一。今天一起来总结下Spring中Bean是怎么被创建出来的
    2023-03-03
  • LambdaQueryWrapper与QueryWrapper的使用方式

    LambdaQueryWrapper与QueryWrapper的使用方式

    这篇文章主要介绍了LambdaQueryWrapper与QueryWrapper的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • java链式创建json对象的实现

    java链式创建json对象的实现

    本文主要介绍了java中如何通过最简单的方式实现链式创建json对象,解决创建json代码臃肿的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java反射机制的实现详解

    Java反射机制的实现详解

    反射主要解决动态编程,即使用反射时,所有的对象生成是动态的,因此调用的方法也是动态的.反射可以简化开发,但是代码的可读性很低
    2013-05-05
  • SpringBoot记录Http请求日志的方法

    SpringBoot记录Http请求日志的方法

    这篇文章主要介绍了SpringBoot记录Http请求日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Java项目中classpath类路径是什么

    Java项目中classpath类路径是什么

    classpath指的是类路径,也就是编译之后的target文件夹下的WEB-INF/class文件夹,下面这篇文章主要给大家介绍了关于Java项目中classpath类路径是什么的相关资料,需要的朋友可以参考下
    2023-02-02
  • Springboot集成Springbrick实现动态插件的步骤详解

    Springboot集成Springbrick实现动态插件的步骤详解

    这篇文章主要介绍了Springboot集成Springbrick实现动态插件的详细过程,文中的流程通过代码示例介绍的非常详细,感兴趣的同学可以参考一下
    2023-06-06
  • 分布式系统中的降级熔断设计问题面试

    分布式系统中的降级熔断设计问题面试

    这篇文章主要为大家介绍了分布式系统中的降级熔断设计问题面试解答,有需要的朋友可以借鉴参考下,希望能有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java实现文件压缩与解压的示例[zip格式,gzip格式]

    Java实现文件压缩与解压的示例[zip格式,gzip格式]

    本篇文章主要介绍了Java实现文件压缩与解压的示例[zip格式,gzip格式],具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • SpringBoot添加SSL证书的方法

    SpringBoot添加SSL证书的方法

    HTTPS 实际上就是 HTTP + SSL,使我们的网站更加安全,地址栏上会有一把小锁。那么如何在SpringBoot添加SSL证书,下面就一起来了解一下
    2021-05-05

最新评论