溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java導(dǎo)出excel時合并同一列中相同內(nèi)容的行思路詳解

發(fā)布時間:2020-09-26 11:09:50 來源:腳本之家 閱讀:467 作者:HPUCL 欄目:編程語言

一、有時候?qū)С鯡xcel時需要按類別導(dǎo)出,一大類下好幾個小類,小類下又有好幾個小小類,就像下圖:

Java導(dǎo)出excel時合并同一列中相同內(nèi)容的行思路詳解

要實現(xiàn)這個也不難,

思路如下:按照大類來循環(huán),如上就是按照張江校區(qū)、徐匯校區(qū)、臨港校區(qū)三個大類循環(huán),然后再處理小類,因為本例小小類不涉及合并,所以只涉及處理小類,如果需要處理小小類,還需要在處理一下,具體實現(xiàn)原理同小類;

      每次循環(huán)時記錄下此次循環(huán)的房屋類型和上次循環(huán)的房屋類型,兩者相同時,要合并的結(jié)束行++,否者,說明這個房屋類型已經(jīng)循環(huán)完畢(前提是各類型都按順序order by 了,保證相同類型相鄰),開始融合。具體實現(xiàn)如下:

二、實現(xiàn)代碼,具體思路已經(jīng)在注釋中了

 public void expStatistics(String filePath,String campuscode) {
    try {
      WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
      JxlFormatUtil Jfu = new JxlFormatUtil();
      WritableSheet ws = wwb.createSheet("房屋報表統(tǒng)計", 0);
      String[] tableHead = {"校區(qū)名稱:20","房屋類型:30","房屋用途:30","使用面積(㎡):20"};
      for (int i = 0; i < tableHead.length; i++) {//每一列的標(biāo)題樣式
        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行開始
      //以下變量用來融合相同內(nèi)容 的行
      int perCol = col;
      String perPurpose = "";//上一個用途類型
      String purpose = "";//當(dāng)前用途類型
      int startMergeCol = 1;//要融合的第一行
      int endMergeCol = 0;//要融合的最后行
      boolean flag = true;//用來記錄是否是第一次循環(huán)
      //根據(jù)搜索條件導(dǎo)出
      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){//如果是第一次循環(huán),將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();
    }
  }

總結(jié)

以上所述是小編給大家介紹的Java導(dǎo)出excel時合并同一列中相同內(nèi)容的行思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI