From 56b43139978d72c01af54b6398dc1083d39c90dc Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sun, 20 Mar 2022 21:41:31 +0000 Subject: [PATCH] [bug-64536] add getDimension on XSSFSheet git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1899091 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xssf/usermodel/XSSFSheet.java | 14 ++++++++++ .../poi/xssf/usermodel/TestXSSFSheet.java | 24 ++++++++++++++++++ test-data/spreadsheet/1_NoIden.xlsx | Bin 0 -> 8038 bytes 3 files changed, 38 insertions(+) create mode 100644 test-data/spreadsheet/1_NoIden.xlsx 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 0000000000000000000000000000000000000000..a7f3159795106ce28c3a2b4c7d68567a2edd9c5c GIT binary patch literal 8038 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 literal 0 HcmV?d00001 -- 2.39.5