--- C:\josh\client\poi\svn\trunk-h2/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (revision 652045) +++ C:\josh\client\poi\svn\trunk-h2/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (working copy) @@ -600,6 +600,8 @@ * * @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 to the specified name. */ public HSSFSheet createSheet(String sheetname) @@ -639,9 +641,9 @@ } /** - * 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 @@ { String sheetname = workbook.getSheetName(k); - if (sheetname.equals(name)) + if (sheetname.equalsIgnoreCase(name)) { retval = (HSSFSheet) sheets.get(k); } --- C:\josh\client\poi\svn\trunk-h2/src/java/org/apache/poi/hssf/model/Workbook.java (revision 652045) +++ C:\josh\client\poi\svn\trunk-h2/src/java/org/apache/poi/hssf/model/Workbook.java (working copy) @@ -476,9 +476,9 @@ } /** - * 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 @@ 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; --- C:\josh\client\poi\svn\trunk-h2/src/documentation/content/xdocs/changes.xml (revision 652045) +++ C:\josh\client\poi\svn\trunk-h2/src/documentation/content/xdocs/changes.xml (working copy) @@ -37,6 +37,7 @@ + 44892 - made HSSFWorkbook.getSheet(String) case insensitive 44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect HSLF: Support for getting embedded sounds from slide show HSLF: Initial support for rendering slides into images --- C:\josh\client\poi\svn\trunk-h2/src/documentation/content/xdocs/status.xml (revision 652045) +++ C:\josh\client\poi\svn\trunk-h2/src/documentation/content/xdocs/status.xml (working copy) @@ -34,6 +34,7 @@ + 44892 - made HSSFWorkbook.getSheet(String) case insensitive 44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect HSLF: Support for getting embedded sounds from slide show HSLF: Initial support for rendering slides into images --- C:\josh\client\poi\svn\trunk-h2/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (revision 652045) +++ C:\josh\client\poi\svn\trunk-h2/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (working copy) @@ -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 @@ 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");