Fix bug #50718 - More helpful error message when you try to create a CellReference with #REF!
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1078039 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
93e7799a7b
commit
18153d96ef
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.8-beta2" date="2011-??-??">
|
<release version="3.8-beta2" date="2011-??-??">
|
||||||
|
<action dev="poi-developers" type="fix">50718 - More helpful error message when you try to create a CellReference with #REF!</action>
|
||||||
<action dev="poi-developers" type="fix">50784 - XSSFColors return by XSSFFont now have theme information applied to them</action>
|
<action dev="poi-developers" type="fix">50784 - XSSFColors return by XSSFFont now have theme information applied to them</action>
|
||||||
<action dev="poi-developers" type="fix">50846 - Improve how XSSFColor inherits from Themes</action>
|
<action dev="poi-developers" type="fix">50846 - Improve how XSSFColor inherits from Themes</action>
|
||||||
<action dev="poi-developers" type="fix">50847 - XSSFFont now accepts the full range of Charsets from FontChartset</action>
|
<action dev="poi-developers" type="fix">50847 - XSSFFont now accepts the full range of Charsets from FontChartset</action>
|
||||||
|
@ -85,6 +85,10 @@ public class CellReference {
|
|||||||
* delimited and escaped as per normal syntax rules for formulas.
|
* delimited and escaped as per normal syntax rules for formulas.
|
||||||
*/
|
*/
|
||||||
public CellReference(String cellRef) {
|
public CellReference(String cellRef) {
|
||||||
|
if(cellRef.endsWith("#REF!")) {
|
||||||
|
throw new IllegalArgumentException("Cell reference invalid: " + cellRef);
|
||||||
|
}
|
||||||
|
|
||||||
String[] parts = separateRefParts(cellRef);
|
String[] parts = separateRefParts(cellRef);
|
||||||
_sheetName = parts[0];
|
_sheetName = parts[0];
|
||||||
String colRef = parts[1];
|
String colRef = parts[1];
|
||||||
@ -335,7 +339,6 @@ public class CellReference {
|
|||||||
* name still in ALPHA-26 number format. The third element is the row.
|
* name still in ALPHA-26 number format. The third element is the row.
|
||||||
*/
|
*/
|
||||||
private static String[] separateRefParts(String reference) {
|
private static String[] separateRefParts(String reference) {
|
||||||
|
|
||||||
int plingPos = reference.lastIndexOf(SHEET_NAME_DELIMITER);
|
int plingPos = reference.lastIndexOf(SHEET_NAME_DELIMITER);
|
||||||
String sheetName = parseSheetName(reference, plingPos);
|
String sheetName = parseSheetName(reference, plingPos);
|
||||||
int start = plingPos+1;
|
int start = plingPos+1;
|
||||||
|
@ -231,7 +231,7 @@ public final class TestHSSFName extends BaseTestNamedRange {
|
|||||||
try {
|
try {
|
||||||
new AreaReference(name2.getRefersToFormula());
|
new AreaReference(name2.getRefersToFormula());
|
||||||
fail("attempt to supply an invalid reference to AreaReference constructor results in exception");
|
fail("attempt to supply an invalid reference to AreaReference constructor results in exception");
|
||||||
} catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition
|
} catch (IllegalArgumentException e) { // TODO - use a stronger typed exception for this condition
|
||||||
// expected during successful test
|
// expected during successful test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,6 +193,23 @@ public final class TestCellReference extends TestCase {
|
|||||||
confirmCrInRange(false, "A", "0", v2007);
|
confirmCrInRange(false, "A", "0", v2007);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testInvalidReference() {
|
||||||
|
try {
|
||||||
|
new CellReference("Sheet1!#REF!");
|
||||||
|
fail("Shouldn't be able to create a #REF! refence");
|
||||||
|
} catch(IllegalArgumentException e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
new CellReference("'MySheetName'!#REF!");
|
||||||
|
fail("Shouldn't be able to create a #REF! refence");
|
||||||
|
} catch(IllegalArgumentException e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
new CellReference("#REF!");
|
||||||
|
fail("Shouldn't be able to create a #REF! refence");
|
||||||
|
} catch(IllegalArgumentException e) {}
|
||||||
|
}
|
||||||
|
|
||||||
private static void confirmCrInRange(boolean expResult, String colStr, String rowStr,
|
private static void confirmCrInRange(boolean expResult, String colStr, String rowStr,
|
||||||
SpreadsheetVersion sv) {
|
SpreadsheetVersion sv) {
|
||||||
if (expResult == CellReference.cellReferenceIsWithinRange(colStr, rowStr, sv)) {
|
if (expResult == CellReference.cellReferenceIsWithinRange(colStr, rowStr, sv)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user