84

Is there any other way to merge cells in Excel using Apache POI library?

I was trying using the following, but its not working

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

// merging the region
sheet1.addMergedRegion(region);
2
  • 22
    What do you mean by "not working"? Throws an error? Upsets Excel? Merges a different region? Sits around all day watching tv? ;-) Commented Sep 10, 2013 at 10:54
  • 1
    cells do not merge..excel remains the same... Commented Sep 11, 2013 at 3:09

6 Answers 6

182

You can use sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);

example sheet.addMergedRegion(new CellRangeAddress(1,1,1,4)); will merge from B2 to E2. Remember it is zero based indexing (ex. POI version 3.12).

for detail refer BusyDeveloper's Guide

Sign up to request clarification or add additional context in comments.

4 Comments

if after this, Excel says it has to repair the file, make sure you're not overlapping cells when merging
@golimar What do you mean by overlapping cells?
@JamesKleeh For example, creating one merged region A1+A2 and another merged region A2+A3
Note that there are two versions of CellRangeAddress: the one to use is org.apache.poi.ss.util.CellRangeAddress whereas the other one org.apache.poi.hssf.util.CellRangeAddress is now deprecated. See stackoverflow.com/questions/22267679/…
16

You can use :

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

Make sure the CellRangeAddress does not coincide with other merged regions as that will throw an exception.

  • If you want to merge cells one above another, keep column indexes same
  • If you want to merge cells which are in a single row, keep the row indexes same
  • Indexes are zero based

For what you were trying to do this should work:

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

1 Comment

The most wholesome answer. Also explains general guidelines for merging.
7

I create a method that merge cells and put border if you want.

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

Comments

5

The best answer

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

1 Comment

"The best answer" probably shouldn't include minus signs in variables. Also, the variables are outright wrong: columns are in the third and fourth position, not the first and second.
0

syntax is:

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

Example:

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

Here the cell 0 to cell 5 will be merged of the 4th row.

Comments

0

The answers of sheet.addMergedRegion(r1, r2, c1, c2) ends up creating a merged cell but it does not give you center across the selection result

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.