https://issues.apache.org/bugzilla/show_bug.cgi?id=56454

            Bug ID: 56454
           Summary: XSSFSheet.shiftRows(...) and HSSFSheet.shiftRows(...)
                    incorrectly handle merged regions starting before the
                    first shifted row.
           Product: POI
           Version: 3.10
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSSF
          Assignee: [email protected]
          Reporter: [email protected]

Created attachment 31556
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=31556&action=edit
Test case demonstrating the problem.

XSSFSheet.shiftRows(...) and HSSFSheet.shiftRows(...) incorrectly handle merged
regions starting above the first row to shift containing the shifted row,
depending on the first column of the merged region.

If the merged region does not contain column 0, the region gets (incorrectly)
shifted.

Consider the following example:

Case 1:

- Create merged region in A2:B5 (starting at row 3 col 0, ending at row 6 col
1)
- Shift row 4 down 1 row: sheet.shiftRows(3, sheet.getLastRowNum(), n);

Case 2:

- Create merged region in B2:C5 (starting at row 3 col 1, ending at row 6 col
2)
- Shift row 4 down 1 row: sheet.shiftRows(3, sheet.getLastRowNum(), n);

Observed Result:

In case 1, the merged region is still starting at row 3. In case 2, it starts
at row 4.

Expected result:

Merged region should still be starting at row 3 in both cases.



The reason for this behaviour is in XSSFRowShifter line 69:

if (!containsCell(merged, startRow - 1, 0) && !containsCell(merged, endRow + 1,
0)) {

The check for column 0 should not be there. Instead, the line should look like
this:

if (!containsRow(merged, startRow - 1) && !containsRow(merged, endRow + 1)) {

A similar check is done in HSSFSheet Line 1286 (using
SheetUtil.containsCell(...)).

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to