diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 2ee93cdef..55308a758 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,7 @@ + 44892 - made HSSFWorkbook.getSheet(String) case insensitive 44886] - Correctly process PICT metafile in EscherMetafileBlip 44893 - Correctly handle merged regions in HSSFSheet.autoSizeColumn diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 7a2bbf5ce..58a560996 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 44892 - made HSSFWorkbook.getSheet(String) case insensitive 44886] - Correctly process PICT metafile in EscherMetafileBlip 44893 - Correctly handle merged regions in HSSFSheet.autoSizeColumn diff --git a/src/java/org/apache/poi/hssf/model/Workbook.java b/src/java/org/apache/poi/hssf/model/Workbook.java index 8fa3010a4..08f226318 100644 --- a/src/java/org/apache/poi/hssf/model/Workbook.java +++ b/src/java/org/apache/poi/hssf/model/Workbook.java @@ -476,9 +476,9 @@ public class Workbook implements Model } /** - * Determines whether a workbook contains the privided sheet name. + * Determines whether a workbook contains the provided sheet name. * - * @param name the name to test + * @param name the name to test (case insensitive match) * @param excludeSheetIdx the sheet to exclude from the check or -1 to include all sheets in the check. * @return true if the sheet contains the name, false otherwise. */ @@ -487,7 +487,7 @@ public class Workbook implements Model for ( int i = 0; i < boundsheets.size(); i++ ) { BoundSheetRecord boundSheetRecord = (BoundSheetRecord) boundsheets.get( i ); - if (excludeSheetIdx != i && name.equals(boundSheetRecord.getSheetname())) + if (excludeSheetIdx != i && name.equalsIgnoreCase(boundSheetRecord.getSheetname())) return true; } return false; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index 30776608b..a76cfd159 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -600,6 +600,8 @@ public class HSSFWorkbook extends POIDocument * * @param sheetname sheetname to set for the sheet. * @return HSSFSheet representing the new sheet. + * @throws IllegalArgumentException if there is already a sheet present with a case-insensitive + * match for the specified name. */ public HSSFSheet createSheet(String sheetname) @@ -639,9 +641,9 @@ public class HSSFWorkbook extends POIDocument } /** - * Get sheet with the given name + * Get sheet with the given name (case insensitive match) * @param name of the sheet - * @return HSSFSheet with the name provided or null if it does not exist + * @return HSSFSheet with the name provided or null if it does not exist */ public HSSFSheet getSheet(String name) @@ -652,7 +654,7 @@ public class HSSFWorkbook extends POIDocument { String sheetname = workbook.getSheetName(k); - if (sheetname.equals(name)) + if (sheetname.equalsIgnoreCase(name)) { retval = (HSSFSheet) sheets.get(k); } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java index 3696bb940..4c156e7b6 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java @@ -17,6 +17,7 @@ package org.apache.poi.hssf.usermodel; +import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; @@ -39,7 +40,24 @@ public final class TestHSSFWorkbook extends TestCase { NameRecord nameRecord = b.getWorkbook().getNameRecord( 0 ); assertEquals( 3, nameRecord.getIndexToSheet() ); } - + + public void testCaseInsensitiveNames() { + HSSFWorkbook b = new HSSFWorkbook( ); + HSSFSheet originalSheet = b.createSheet("Sheet1"); + HSSFSheet fetchedSheet = b.getSheet("sheet1"); + if(fetchedSheet == null) { + throw new AssertionFailedError("Identified bug 44892"); + } + assertEquals(originalSheet, fetchedSheet); + try { + b.createSheet("sHeeT1"); + fail("should have thrown exceptiuon due to duplicate sheet name"); + } catch (IllegalArgumentException e) { + // expected during successful test + assertEquals("The workbook already contains a sheet of this name", e.getMessage()); + } + } + public void testDuplicateNames() { HSSFWorkbook b = new HSSFWorkbook( ); b.createSheet("Sheet1");