在excel中使用apache poi在java中合并文本中心

我已经创build了一个Excel工作表,我将值插入单元格并同时垂直合并单元格,我能够实现这一点,但问题是,我无法在合并的单元格中垂直居中alignment文本。目前,文本显示在垂直合并单元格的底部。

这是我的代码,

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

最后,我解决了这个问题。 我在这里发布的变化,因为它可能有助于其他。

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