diff --git a/src/java/org/apache/poi/ss/util/Region.java b/src/java/org/apache/poi/ss/util/Region.java index e44026cde..71dd31403 100644 --- a/src/java/org/apache/poi/ss/util/Region.java +++ b/src/java/org/apache/poi/ss/util/Region.java @@ -62,7 +62,16 @@ public class Region this(region.row_from, region.col_from, region.row_to, region.col_to); } - /** + public Region(String ref) { + CellReference cellReferenceFrom = new CellReference(ref.substring(0, ref.indexOf(":"))); + CellReference cellReferenceTo = new CellReference(ref.substring(ref.indexOf(":") + 1)); + this.rowFrom = cellReferenceFrom.getRow(); + this.colFrom = (short) cellReferenceFrom.getCol(); + this.rowTo = cellReferenceTo.getRow(); + this.colTo = (short) cellReferenceTo.getCol(); + } + + /** * get the upper left hand corner column number * * @return column number for the upper left hand corner diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 96ffe3c03..08d42db6c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -458,13 +458,12 @@ public class XSSFSheet implements Sheet { } public Region getMergedRegionAt(int index) { - // TODO Auto-generated method stub - return null; + CTMergeCell ctMergeCell = getMergedCells().getMergeCellArray(index); + return new Region(ctMergeCell.getRef()); } public int getNumMergedRegions() { - // TODO Auto-generated method stub - return 0; + return getMergedCells().sizeOfMergeCellArray(); } public int getNumHyperlinks() { @@ -990,13 +989,18 @@ public class XSSFSheet implements Sheet { } private void addNewMergeCell(Region region) { - if (ctMergeCells == null) { - ctMergeCells = worksheet.addNewMergeCells(); - } + ctMergeCells = getMergedCells(); CTMergeCell ctMergeCell = ctMergeCells.addNewMergeCell(); ctMergeCell.setRef(region.getRegionRef()); } + private CTMergeCells getMergedCells() { + if (ctMergeCells == null) { + ctMergeCells = worksheet.addNewMergeCells(); + } + return ctMergeCells; + } + private CTPageSetUpPr getSheetTypePageSetUpPr() { if (getSheetTypeSheetPr().getPageSetUpPr() == null) { getSheetTypeSheetPr().setPageSetUpPr(CTPageSetUpPr.Factory.newInstance()); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index e92d5d065..a89b14cc6 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -23,6 +23,7 @@ import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.util.Region; import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; @@ -548,6 +549,27 @@ public class TestXSSFSheet extends TestCase { assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane()); } + public void testNewMergedRegionAt() { + Workbook workbook = new XSSFWorkbook(); + CTSheet ctSheet = CTSheet.Factory.newInstance(); + CTWorksheet ctWorksheet = CTWorksheet.Factory.newInstance(); + XSSFSheet sheet = new XSSFSheet(ctSheet, ctWorksheet, (XSSFWorkbook) workbook); + Region region = new Region("B2:D4"); + sheet.addMergedRegion(region); + assertEquals("B2:D4", sheet.getMergedRegionAt(0).getRegionRef()); + } + + public void testGetNumMergedRegions() { + Workbook workbook = new XSSFWorkbook(); + CTSheet ctSheet = CTSheet.Factory.newInstance(); + CTWorksheet ctWorksheet = CTWorksheet.Factory.newInstance(); + XSSFSheet sheet = new XSSFSheet(ctSheet, ctWorksheet, (XSSFWorkbook) workbook); + assertEquals(0, sheet.getNumMergedRegions()); + Region region = new Region("B2:D4"); + sheet.addMergedRegion(region); + assertEquals(1, sheet.getNumMergedRegions()); + } + private XSSFSheet createSheet(XSSFWorkbook workbook, String name) { XSSFSheet sheet = (XSSFSheet) workbook.createSheet(name); diff --git a/src/testcases/org/apache/poi/ss/util/TestRegion.java b/src/testcases/org/apache/poi/ss/util/TestRegion.java index 8cd620d38..e05b072c3 100644 --- a/src/testcases/org/apache/poi/ss/util/TestRegion.java +++ b/src/testcases/org/apache/poi/ss/util/TestRegion.java @@ -46,4 +46,10 @@ public class TestRegion extends TestCase { assertFalse(region.contains(9, (short) 10)); } + public void testConstructors() { + Region region_1 = new Region("A1:E7"); + assertEquals(0, region_1.getColumnFrom()); + assertEquals((short)4, region_1.getColumnTo()); + } + }