2017-01-22 7 views
0

Я создал лист excel, где я вставляю значение в ячейку и объединяю ячейки по вертикали в одно и то же время, и я могу добиться этого, но проблема заключается в том, что я не могу выровнять текст по вертикали в объединенной ячейке. В настоящее время текст отображается внизу вертикально объединенной ячейки.Выравнивать текстовый центр в объединенной области в excel с помощью apache poi в java

вот мой код,

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; 
       } 
      } 
     }