使用Apache POI在Excel中合并单元格

80

是否有其他方法可以使用Apache POI库合并Excel中的单元格?

我尝试了以下代码,但它不起作用。

// selecting the region in Worksheet for merging data
CellRangeAddress region = CellRangeAddress.valueOf("A" + rowNo + ":D"
            + rowNo);

// merging the region
sheet1.addMergedRegion(region);

21
“不工作”是什么意思?会抛出错误吗?会使 Excel 出问题吗?会合并不同的区域吗?还是只是整天无所事事看电视呢?;-) - Gagravarr
1
单元格不合并... Excel 保持不变... - androidDev
5个回答

179
您可以使用sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);方法来合并单元格。

例如,sheet.addMergedRegion(new CellRangeAddress(1,1,1,4));将合并从B2到E2的单元格。请记住,这里使用的是从零开始的索引(例如,POI版本3.12)。
详情请参考BusyDeveloper's Guide

12
如果Excel在此之后提示需要修复文件,请确保在合并单元格时不要重叠。 - golimar
@golimar 你说的“重叠单元格”是什么意思? - James Kleeh
例如,创建一个合并区域A1+A2和另一个合并区域A2+A3。 - golimar
2
请注意,CellRangeAddress有两个版本:应使用org.apache.poi.ss.util.CellRangeAddress,而另一个版本org.apache.poi.hssf.util.CellRangeAddress现已弃用。请参见https://dev59.com/lX3aa4cB1Zd3GeqPcF7w - gordon613

12

你可以使用:

sheet.addMergedRegion(new CellRangeAddress(startRowIndx, endRowIndx, startColIndx,endColIndx));

确保CellRangeAddress不与其他合并区域重叠,否则会抛出异常。

  • 如果要将单元格向上合并,请保持列索引相同
  • 如果要合并位于同一行的单元格,请保持行索引相同
  • 索引从零开始

对于您想要执行的操作,这应该可以工作:

sheet.addMergedRegion(new CellRangeAddress(rowNo, rowNo, 0, 3));

最全面的答案。同时解释了合并的一般准则。 - Saideep Ullal

6
我创建了一个方法,可以合并单元格并添加边框(如果需要)。
protected void setMerge(Sheet sheet, int numRow, int untilRow, int numCol, int untilCol, boolean border) {
    CellRangeAddress cellMerge = new CellRangeAddress(numRow, untilRow, numCol, untilCol);
    sheet.addMergedRegion(cellMerge);
    if (border) {
        setBordersToMergedCells(sheet, cellMerge);
    }

}  

protected void setBordersToMergedCells(Sheet sheet, CellRangeAddress rangeAddress) {
    RegionUtil.setBorderTop(BorderStyle.MEDIUM, rangeAddress, sheet);
    RegionUtil.setBorderLeft(BorderStyle.MEDIUM, rangeAddress, sheet);
    RegionUtil.setBorderRight(BorderStyle.MEDIUM, rangeAddress, sheet);
    RegionUtil.setBorderBottom(BorderStyle.MEDIUM, rangeAddress, sheet);
}

5
最佳答案。
sheet.addMergedRegion(new CellRangeAddress(start-col,end-col,start-cell,end-cell));

4
“最佳答案”中的变量最好不要包含减号。此外,这些变量的位置是错误的:列应该在第三和第四个位置,而不是第一个和第二个位置。 - Reinderien

0

语法为:

sheet.addMergedRegion(new CellRangeAddress(start-col,end-col,start-cell,end-cell));

示例:

sheet.addMergedRegion(new CellRangeAddress(4, 4, 0, 5));

这里将合并第4行的单元格0到单元格5。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接