diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 666ba1964d..a5aa37b7fe 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -3962,6 +3962,20 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet, OoxmlSheetEx safeGetProtectionField().setSelectUnlockedCells(enabled); } + /** + * Reads the dimensions of the sheet data + * @return dimensions of the sheet data as a Cell Range (can be null) + * @since POI 5.2.3 + */ + public CellRangeAddress getDimension() { + CTSheetDimension ctSheetDimension = worksheet.getDimension(); + String ref = ctSheetDimension == null ? null : ctSheetDimension.getRef(); + if (ref != null) { + return CellRangeAddress.valueOf(ref); + } + return null; + } + private CTSheetProtection safeGetProtectionField() { if (!isSheetProtectionEnabled()) { return worksheet.addNewSheetProtection(); diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 08be04b107..269ca4622b 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -2253,4 +2253,28 @@ public final class TestXSSFSheet extends BaseTestXSheet { assertTrue(row2.getZeroHeight()); } } + + @Test + void testBug64536() throws IOException { + try ( + XSSFWorkbook xssfWorkbook = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("1_NoIden.xlsx"); + UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream() + ) { + XSSFSheet fileSheet = xssfWorkbook.getSheetAt(0); + assertEquals(CellRangeAddress.valueOf("B1:D9"), fileSheet.getDimension()); + + // Create Row and Cell, Then Set a Value + // 5, 2, 4 is just random number for test + Row fileRow = fileSheet.createRow(5); + Cell fileCell = fileRow.createCell(2, CellType.STRING); + fileCell.setCellValue("TEST VALUE"); + + xssfWorkbook.write(bos); + + try (XSSFWorkbook xssfWorkbook2 = new XSSFWorkbook(bos.toInputStream())) { + XSSFSheet xssfSheet = xssfWorkbook2.getSheetAt(0); + assertEquals(CellRangeAddress.valueOf("B1:F9"), xssfSheet.getDimension()); + } + } + } } diff --git a/test-data/spreadsheet/1_NoIden.xlsx b/test-data/spreadsheet/1_NoIden.xlsx new file mode 100644 index 0000000000..a7f3159795 Binary files /dev/null and b/test-data/spreadsheet/1_NoIden.xlsx differ