java - 在java中使用apache poi在excel中的合并区域中对齐文本中心

标签 java excel 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;
                }
            }
        }

最佳答案

终于解决了这个问题。我在这里发布更改,因为它可能对其他人有帮助。

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

关于java - 在java中使用apache poi在excel中的合并区域中对齐文本中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791554/

相关文章:

Java套接字并行发送

java - 如何打印 XML 模式

java - JSF 不在 WebSphere Liberty Profile 上工作

java - 如何打印一系列从 1 小于 x 到 0 结束的数字?

python - 在 Dash Python 中下载具有列格式的 Excel 文件

excel - 如何使用 vba 在 Excel 中制作蒙版?

vba - 保存没有宏的 Excel 文件。 Excel VBA代码

java - 兴趣点 : not iterating through all excel row while inserting values to database

java - 写入Excel文件后抛出文件未找到异常

java - 如何使用 apache poi 在文档 .docx 中的表格单元格中创建文本框