added HSSFName.isDeleted() to check if the name points to cell that no longer exists
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@657355 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
681f04c05e
commit
ce8e1c9f62
@ -37,6 +37,7 @@
|
||||
|
||||
<!-- Don't forget to update status.xml too! -->
|
||||
<release version="3.1-beta2" date="2008-05-??">
|
||||
<action dev="POI-DEVELOPERS" type="fix">24207 - added HSSFName.isDeleted() to check if the name points to cell that no longer exists</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix">40414 - fixed selected/active sheet after removing sheet from workbook</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix">44523 - fixed workbook sheet selection and focus</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix">45000 - Fixed NPE in ListLevel when numberText is null</action>
|
||||
|
@ -1224,6 +1224,18 @@ Examples:
|
||||
HSSFCell c = r.getCell(crefs[j].getCol());
|
||||
// Do something with this corner cell
|
||||
}
|
||||
}
|
||||
</source>
|
||||
<p>
|
||||
Note, when a cell is deleted, Excel does not delete the attached named range.
|
||||
As result, workbook can contain named ranges that point to cells that no longer exist.
|
||||
You should check the validity of a reference before constructing AreaReference
|
||||
</p>
|
||||
<source>
|
||||
if(hssfName.isDeleted()){
|
||||
//named range points to a deleted cell.
|
||||
} else {
|
||||
AreaReference ref = new AreaReference(hssfName.getReference());
|
||||
}
|
||||
</source>
|
||||
</section>
|
||||
|
@ -34,6 +34,7 @@
|
||||
<!-- Don't forget to update changes.xml too! -->
|
||||
<changes>
|
||||
<release version="3.1-beta2" date="2008-05-??">
|
||||
<action dev="POI-DEVELOPERS" type="fix">24207 - added HSSFName.isDeleted() to check if the name points to cell that no longer exists</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix">40414 - fixed selected/active sheet after removing sheet from workbook</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix">44523 - fixed workbook sheet selection and focus</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix">45000 - Fixed NPE in ListLevel when numberText is null</action>
|
||||
|
@ -139,4 +139,13 @@ public class HSSFName {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if this name points to a cell that no longer exists
|
||||
*
|
||||
* @return true if the name refers to a deleted cell, false otherwise
|
||||
*/
|
||||
public boolean isDeleted(){
|
||||
String ref = getReference();
|
||||
return "#REF!".endsWith(ref);
|
||||
}
|
||||
}
|
||||
|
@ -533,4 +533,28 @@ public final class TestNamedRange extends TestCase {
|
||||
String contents = c.getStringCellValue();
|
||||
assertEquals("Contents of cell retrieved by its named reference", contents, cvalue);
|
||||
}
|
||||
|
||||
public void testDeletedReference() throws Exception {
|
||||
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls");
|
||||
assertEquals(2, wb.getNumberOfNames());
|
||||
|
||||
HSSFName name1 = wb.getNameAt(0);
|
||||
assertEquals("a", name1.getNameName());
|
||||
assertEquals("Sheet1!$A$1", name1.getReference());
|
||||
AreaReference ref1 = new AreaReference(name1.getReference());
|
||||
assertTrue("Successfully constructed first reference", true);
|
||||
|
||||
HSSFName name2 = wb.getNameAt(1);
|
||||
assertEquals("b", name2.getNameName());
|
||||
assertEquals("#REF!", name2.getReference());
|
||||
assertTrue(name2.isDeleted());
|
||||
try {
|
||||
AreaReference ref2 = new AreaReference(name2.getReference());
|
||||
fail("attempt to supply an invalid reference to AreaReference constructor results in exception");
|
||||
} catch (Exception e){
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user