From 0d31a3b8b7444356bb4a5f8fa54eb99403eec797 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 5 Oct 2011 21:18:25 +0000 Subject: [PATCH] Fix bug #51963 - Correct AreaReference handling of references containing a sheet name which includes a comma git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1179444 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../org/apache/poi/ss/util/AreaReference.java | 17 +++++++++++----- .../poi/xssf/usermodel/TestXSSFBugs.java | 19 ++++++++++++++++++ test-data/spreadsheet/51963.xlsx | Bin 0 -> 7138 bytes 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 test-data/spreadsheet/51963.xlsx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 219eb3093..cb49fb56a 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 51963 - Correct AreaReference handling of references containing a sheet name which includes a comma 51955 - XSSFReader supplied StylesTables need to have the theme data available 51716 - Removed incorrect assert in SXSSFSheet#getSXSSFSheet 51834 - Opening and Writing .doc file results in corrupt document diff --git a/src/java/org/apache/poi/ss/util/AreaReference.java b/src/java/org/apache/poi/ss/util/AreaReference.java index ffa0c8888..2082634d1 100644 --- a/src/java/org/apache/poi/ss/util/AreaReference.java +++ b/src/java/org/apache/poi/ss/util/AreaReference.java @@ -152,13 +152,20 @@ public class AreaReference { * unbroken) area, or is it made up of * several different parts? * (If it is, you will need to call - * .... + * {@link #generateContiguous(String)}) */ public static boolean isContiguous(String reference) { - if(reference.indexOf(',') == -1) { - return true; - } - return false; + // If there's a sheet name, strip it off + int sheetRefEnd = reference.indexOf('!'); + if(sheetRefEnd != -1) { + reference = reference.substring(sheetRefEnd); + } + + // Check for the , as a sign of non-coniguous + if(reference.indexOf(',') == -1) { + return true; + } + return false; } public static AreaReference getWholeRow(String start, String end) { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index dd62f7d66..4467dc46a 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -43,6 +43,7 @@ import org.apache.poi.ss.usermodel.Name; 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.AreaReference; import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.XSSFTestDataSamples; import org.apache.poi.xssf.model.CalculationChain; @@ -1230,4 +1231,22 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertNotNull(sh1.getCommentsTable(false)); assertEquals(2, sh1.getCommentsTable(false).getNumberOfComments()); } + + /** + * Sheet names with a , in them + */ + public void test51963() throws Exception { + XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51963.xlsx"); + XSSFSheet sheet = wb.getSheetAt(0); + assertEquals("Abc,1", sheet.getSheetName()); + + Name name = wb.getName("Intekon.ProdCodes"); + assertEquals("'Abc,1'!$A$1:$A$2", name.getRefersToFormula()); + + AreaReference ref = new AreaReference(name.getRefersToFormula()); + assertEquals(0, ref.getFirstCell().getRow()); + assertEquals(0, ref.getFirstCell().getCol()); + assertEquals(1, ref.getLastCell().getRow()); + assertEquals(0, ref.getLastCell().getCol()); + } } diff --git a/test-data/spreadsheet/51963.xlsx b/test-data/spreadsheet/51963.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..154c75418a717cc8b5d2556543ef2dd045b7aa70 GIT binary patch literal 7138 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 J<8J=^_76L(Qk(z) literal 0 HcmV?d00001