From 6c0afcaed52996c0b56312603925d6e16b16d340 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 18 Jul 2008 17:37:44 +0000 Subject: [PATCH] Fix bug #45430 - Correct named range sheet reporting when no local sheet id is given in the xml git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@677979 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 3 +- src/documentation/content/xdocs/status.xml | 3 +- .../apache/poi/xssf/usermodel/XSSFName.java | 17 ++++- .../xssf/usermodel/AllXSSFUsermodelTests.java | 1 + .../poi/xssf/usermodel/TestXSSFBugs.java | 58 ++++++++++++++++++ .../org/apache/poi/hssf/data/45430.xlsx | Bin 0 -> 7929 bytes 6 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java create mode 100644 src/testcases/org/apache/poi/hssf/data/45430.xlsx diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 99106b3a0a..bbfad9132e 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -36,10 +36,9 @@ - 45018 - Support for fetching embeded documents from within an OOXML file Port support for setting a policy on missing / blank cells when fetching, to XSSF too diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 96ff195f29..0c4d945e40 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,10 +33,9 @@ - 45018 - Support for fetching embeded documents from within an OOXML file Port support for setting a policy on missing / blank cells when fetching, to XSSF too diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java index 5392bfce8d..fd5f544b18 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java @@ -57,10 +57,21 @@ public class XSSFName implements Name { } public String getSheetName() { - long sheetId = ctName.getLocalSheetId(); - if(sheetId >= 0) { - return workbook.getSheetName((int)sheetId); + if(ctName.isSetLocalSheetId()) { + // Given as explicit sheet id + long sheetId = ctName.getLocalSheetId(); + if(sheetId >= 0) { + return workbook.getSheetName((int)sheetId); + } + } else { + // Is it embeded in the reference itself? + int excl = getReference().indexOf('!'); + if(excl > -1) { + return getReference().substring(0, excl); + } } + + // Not given at all return null; } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java index b68104a867..9509d787ca 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java @@ -36,6 +36,7 @@ public final class AllXSSFUsermodelTests { public static Test suite() { TestSuite result = new TestSuite(AllXSSFUsermodelTests.class.getName()); result.addTestSuite(TestXSSFBorder.class); + result.addTestSuite(TestXSSFBugs.class); result.addTestSuite(TestXSSFCellFill.class); result.addTestSuite(TestXSSFHeaderFooter.class); result.addTestSuite(TestXSSFSheetComments.class); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java new file mode 100644 index 0000000000..e3d6745734 --- /dev/null +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -0,0 +1,58 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.xssf.usermodel; + +import java.io.File; + +import junit.framework.TestCase; + +public class TestXSSFBugs extends TestCase { + private String getFilePath(String file) { + File xml = new File( + System.getProperty("HSSF.testdata.path") + + File.separator + file + ); + assertTrue(xml.exists()); + + return xml.toString(); + } + + /** + * Named ranges had the right reference, but + * the wrong sheet name + */ + public void test45430() throws Exception { + XSSFWorkbook wb = new XSSFWorkbook(getFilePath("45430.xlsx")); + assertEquals(3, wb.getNumberOfNames()); + + assertEquals(0, wb.getNameAt(0).getCTName().getLocalSheetId()); + assertFalse(wb.getNameAt(0).getCTName().isSetLocalSheetId()); + assertEquals("SheetA!$A$1", wb.getNameAt(0).getReference()); + assertEquals("SheetA", wb.getNameAt(0).getSheetName()); + + assertEquals(0, wb.getNameAt(1).getCTName().getLocalSheetId()); + assertFalse(wb.getNameAt(1).getCTName().isSetLocalSheetId()); + assertEquals("SheetB!$A$1", wb.getNameAt(1).getReference()); + assertEquals("SheetB", wb.getNameAt(1).getSheetName()); + + assertEquals(0, wb.getNameAt(2).getCTName().getLocalSheetId()); + assertFalse(wb.getNameAt(2).getCTName().isSetLocalSheetId()); + assertEquals("SheetC!$A$1", wb.getNameAt(2).getReference()); + assertEquals("SheetC", wb.getNameAt(2).getSheetName()); + } +} diff --git a/src/testcases/org/apache/poi/hssf/data/45430.xlsx b/src/testcases/org/apache/poi/hssf/data/45430.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..48af3f9ceee4b3c0275237fe19b030ed32ed72cd GIT binary patch literal 7929 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 Y0;?)wqj7RMWg`T1p-BQY-Q~Cc0VxQ5UjP6A literal 0 HcmV?d00001 -- 2.39.5