2017-01-22 3 views
0

セルに値を挿入して同時にセルを垂直にマージするExcelシートを作成しましたが、問題は達成できましたそれは、マージされたセルにテキストを垂直に配置することができません。現在、テキストは垂直にマージされたセルの下部に表示されています。Javaのapache poiを使用してExcelのマージされた領域のテキストセンターを整列させる

はここに私のコードです、

CellStyle cs = null; 
    cs = wb.createCellStyle(); 
    cs.setWrapText(true); 
    //cs.setAlignment(CellStyle.ALIGN_CENTER); 
    cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER); 
    cs.setFont(f); 



      Row row[]=new Row[pageListAcrToDept.size()]; 
      for (int i = 0; i < pageListAcrToDept.size(); i++) { 
       rowIndex = 8 + i ; 
       row[i]=sheet.createRow(rowIndex); 
      } 

      List<List<String>> datas=new ArrayList<>(); 
      datas.add(pageListAcrToDept); 
      datas.add(notesListAcrToDept); 
      datas.add(treatmentListAcrToDept); 
      datas.add(upcListAcrToDept); 
      datas.add(itemCodeListAcrToDept); 
      datas.add(descListAcrToDept); 
      datas.add(subDeptListAcrToDept); 
      datas.add(limitListAcrToDept); 
      datas.add(XforListAcrToDept); 
      datas.add(priceListAcrToDept); 
      datas.add(couponListAcrToDept); 
      datas.add(adzoneListAcrToDept); 
      datas.add(promoDescListAcrToDept); 

      for (int column = 0; column < 13; column++) { 
       List <String> list=datas.get(column); 
      int index=0; 
      for (int i = 0, prev = -1; i < list.size(); i++) { 
       if (i == list.size() - 1 || ! list.get(i).equals(list.get(i + 1))) { 
        //System.out.printf("number: %d, count: %d%n", list.get(i), i - prev); 


        for(int pos=0;pos<i - prev;pos++){ 
         int posi=index+pos; 
        Cell cell= row[posi].createCell(column); 
        cell.setCellStyle((CellStyle) cs); 
        cell.setCellValue(list.get(i)); 
        } 
        int startrowpos=index+8; 
        int endrowpos=index+8+(i - prev)-1; 
        if(startrowpos==endrowpos){ 
         LOG.info("don't merge"); 
        }else{ 
        CellRangeAddress cellRangeAddress = new CellRangeAddress(startrowpos, endrowpos, 
          column, column); 
        sheet.addMergedRegion(cellRangeAddress); 
        } 
        index=index+(i - prev); 
        prev = i; 
       } 
      } 
     } 
+1

この質問は[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)が必要な理由の例を示しています。実際の 'apache poi'バージョン(3.15)では、垂直方向の配置は一般に併合された領域でも機能します。それであなたの特別なケースではうまくいかないのはなぜですか?サンプルコードが完全ではなく、検証可能ではないため、あなた以外の誰もそれを知ることはできません。 –

答えて

1

は最後に、私はこの問題を解決しました。それが他の人を助けるかもしれないので、私は変更をここに掲示しています。

 for (int column = 0; column < 13; column++) { 
       List <String> list=datas.get(column); 
      int index=0; 
      for (int i = 0, prev = -1; i < list.size(); i++) { 
       if (i == list.size() - 1 || ! list.get(i).equals(list.get(i + 1))) { 
        //System.out.printf("number: %d, count: %d%n", list.get(i), i - prev); 

        int posi=0; 
        for(int pos=0;pos<i - prev;pos++){ 
         if(pos==0){ 
          posi=index+pos; 
         } 
        } 
        int startrowpos=index+8; 
        int endrowpos=index+8+(i - prev)-1; 
        if(startrowpos==endrowpos){ 
         LOG.info("don't merge"); 
         Cell cell= row[posi].createCell(column); 
         cell.setCellStyle((CellStyle) cs); 
         cell.setCellValue(list.get(i)); 
        }else{ 
        CellRangeAddress cellRangeAddress = new CellRangeAddress(startrowpos, endrowpos, 
          column, column); 
        sheet.addMergedRegion(cellRangeAddress); 
         Cell cell= row[posi].createCell(column); 
         cell.setCellStyle((CellStyle) cs); 
         cell.setCellValue(list.get(i)); 
        } 
        index=index+(i - prev); 
        prev = i; 
       } 
      } 
     } 
関連する問題