关于excel多层级(树形)数据结构,提取成树形结构数据并导出到数据库

在开发中遇到一个问题,就是有一张excel表中的数据时多层级的,不是普通一行一行的,而是,一行对应多行,多行之中的每一行在对应多行数据。形成树形结构:

关于excel多层级(树形)数据结构,提取成树形结构数据并导出到数据库_第1张图片

如上图所示:我遇到的excel表的结构:

导入到数据库中,是有多个表组成的!我要实现把这些数据提取出来西港城一个树形而机构的List,然后转为json,导入数据库。

献上我的核心代码:

// 获取Excel内容
  public static List getContent(Sheet sheet) {
    List list = new ArrayList<>();
    List cbfList = new ArrayList<>();
    List dkxxList = new ArrayList<>();
    List familyList = new ArrayList<>();
    List cbfList98=new ArrayList<>();
    List cbfRowsIndex=new ArrayList();
    Map map=new HashMap();
    List titles=new ArrayList<>();
    // Excel数据总行数
    int rowCount = sheet.getLastRowNum();//getPhysicalNumberOfRows();
    //int columnCount = sheet.getRow(2).getPhysicalNumberOfCells();获取不为空的总列数 getPhysicalNumberOfCells()
    int columnCount =sheet.getRow(2).getLastCellNum() - sheet.getRow(2).getFirstCellNum();
    for(int x=0;x allCbfList =cbfList;
    for(int y=0;y();
      List famList=new ArrayList<>();
      Map cbfMap=cbfList.get(y);
      //System.out.println("每个承包方的Map数据:"+cbfMap);
      int cbfRowNum=Integer.parseInt(String.valueOf(cbfMap.get("cbfRowIndex")));
      //System.out.println("数据:"+cbfRowNum);
      if(y==cbfList.size()-1){
        int allRowCount=sheet.getLastRowNum();
        for(int m=cbfRowNum-5;m<=allRowCount-5;m++){
          //System.out.println("承包方每一行的序号:"+m);
          //System.out.println("总行数"+allRowCount);
          int dkRowIndex=Integer.parseInt(String.valueOf(dkxxList.get(m).get("dkRowIndex")));
          if(m==(dkRowIndex-5)){
            if(StringUtil.isNotEmpty(dkxxList.get(m).get("dklb").toString())) {
              dkxxList.get(m).remove("dkRowIndex");
              dkList.add(dkxxList.get(m));
            }
            //dkList.addAll(dkxxList);
          }
          int familyRowIndex=Integer.parseInt(String.valueOf(familyList.get(m).get("familyRowIndex")));
          if(m==(familyRowIndex-5)){
            if(StringUtil.isNotEmpty(familyList.get(m).get("cyxm").toString())) {
              familyList.get(m).remove("familyRowIndex");
              famList.add(familyList.get(m));
            }
            //famList.addAll(familyList);
          }
        }
      }else{
        Map cbfMap2=cbfList.get(y+1);
        //System.out.println("本条数据:"+cbfMap);
        //System.out.println("下一条数据:"+cbfMap2);
        int cbfRowNum2=Integer.parseInt(String.valueOf(cbfMap2.get("cbfRowIndex")));
        for(int m=cbfRowNum-5;m

首先,Java对excel的操作用有两种:jxl和poi,这里我用的是poi,所以我准备开始思路:第一行的前三列为第一层数据,然后及接着后面二层数据为承包方户主信息,第三层数据为家庭 成员信息还有地块信息。

你可能感兴趣的:(java,笔记,poi,excel,大数据)