在POI中合并后设置值到单元格

Vic*_*cky 4 java apache-poi

我想在POI中形成如下的excel输出:

在此输入图像描述

从图像中可以清楚地看到,我分别在Header3,Header4和Header5下有3个子列.

清单如下:

ListA - 包含A列的值

ListB - 包含B列的值

List1 - 是每行3列的数据库行列表.第一列将在Header3下,第二列在Header 4下,第三列在Header 5下,即列C,F和I.

List2和List3 - 类似于List1,每个值分别在Header3,4和5下面.列表2在列D,G和J下,而列表3在E,H和K列下.

问题1:

我将标题名称存储为具有5个值的列表.

如何迭代此列表以将值分配给合并区域?

我正在做类似下面但不起作用的事情:

// first two headers

for (int i = 0; i < headers.size() - 3; i++) {
            headerCell = headerRow.createCell(i);
            headerCell.setCellValue(allHeaders.get(i).toUpperCase());
            headerCell.setCellStyle(styles.get("header"));
        }

// Merging
sheet.addMergedRegion(org.apache.poi.ss.util.CellRangeAddress.valueOf("$C$1:$E$1"));
sheet.addMergedRegion(org.apache.poi.ss.util.CellRangeAddress.valueOf("$F$1:$H$1"));
sheet.addMergedRegion(org.apache.poi.ss.util.CellRangeAddress.valueOf("$I$1:$K$1"));

for (int i = 3; i < headers.size(); i++) {
            headerCell = headerRow.createCell(i);
            headerCell.setCellValue(allHeaders.get(i).toUpperCase());
            headerCell.setCellStyle(styles.get("header"));
        }
Run Code Online (Sandbox Code Playgroud)

问题2:

如上所述,如何通过List3迭代ListA来输入值?

谢谢阅读!

San*_*ngh 9

实际上我完全不理解你的问题,但我认为有一些关键点对你有帮助.

  1. 合并区域的第一个Cell保留合并单元格的值,其余单元格保持空白值.意味着如果单元格A2到A5与值"Test"合并,那么在迭代A2上将显示"Test",而rest将显示为空白.因此,如果要读取合并的单元格值,则需要仅读取其第一个单元格,类似地,如果要在合并的单元格中写入,则只需要在第一个单元格中写入.

  2. sheet.getNumMergedRegions();返回整数,它将是工作表中合并区域的总数.你也可以使用循环遍历它.

  3. CellRangeAddress merge = sheet.getMergedRegion(int index); 将为您提供从中获取的指定索引的范围地址 getNumMergedRegions()

  4. 现在merge.getFirstRow(),merge.getLastRow(),merge.getFirstColumn(),merge.getLastColumn(), merge.getNumberOfCells(),是相同的方法.

包含合并单元格的行的迭代和不包含任何合并单元格的行没有太大区别.希望这能帮助您解决问题.