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

and*_*Dev 58 java excel android apache-poi

有没有其他方法可以使用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);
Run Code Online (Sandbox Code Playgroud)

San*_*ngh 134

您可以使用 sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);

示例sheet.addMergedRegion(new CellRangeAddress(1,1,1,4));将从B2合并到E2.请记住,它是基于零的索引(例如POI版本3.12).

有关详细信息,请参阅BusyDeveloper指南

  • 如果在此之后,Excel表示必须修复文件,请确保在合并时不重叠单元格 (11认同)
  • 请注意,CellRangeAddress 有两个版本:使用的一个是“org.apache.poi.ss.util.CellRangeAddress”,而另一个“org.apache.poi.hssf.util.CellRangeAddress”现已弃用。请参阅/sf/ask/1558737561/ (2认同)

小智 6

最好的答案

sheet.addMergedRegion(new CellRangeAddress(start-col,end-col,start-cell,end-cell));
Run Code Online (Sandbox Code Playgroud)

  • “最佳答案”可能不应该在变量中包含减号。此外,这些变量是完全错误的:列位于第三和第四位置,而不是第一和第二位置。 (2认同)

Jes*_*hez 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);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 :

sheet.addMergedRegion(new CellRangeAddress(startRowIndx, endRowIndx, startColIndx,endColIndx));
Run Code Online (Sandbox Code Playgroud)

确保CellRangeAddress与其他合并的区域不一致,因为这将引发异常。

  • 如果要合并一个以上的单元格,请保持列索引相同
  • 如果要合并单行中的单元格,请保持行索引相同
  • 索引从零开始

对于您正在尝试执行的操作应该可以:

sheet.addMergedRegion(new CellRangeAddress(rowNo, rowNo, 0, 3));
Run Code Online (Sandbox Code Playgroud)