Parcourir la source

fix issue

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898276 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_2_1
PJ Fanning il y a 2 ans
Parent
révision
c0dc2e51ce

+ 21
- 2
poi/src/main/java/org/apache/poi/ss/formula/OperationEvaluationContext.java Voir le fichier

@@ -223,7 +223,7 @@ public final class OperationEvaluationContext {

SpreadsheetVersion ssVersion = _workbook.getSpreadsheetVersion();

NameType part1refType = isA1Style ? classifyCellReference(refStrPart1, ssVersion) : NameType.CELL;
NameType part1refType = isA1Style ? classifyCellReference(refStrPart1, ssVersion) : getR1C1CellType(refStrPart1);
switch (part1refType) {
case BAD_CELL_OR_NAMED_RANGE:
return ErrorEval.REF_INVALID;
@@ -255,7 +255,7 @@ public final class OperationEvaluationContext {
}
throw new IllegalStateException("Unexpected reference classification of '" + refStrPart1 + "'.");
}
NameType part2refType = isA1Style ? classifyCellReference(refStrPart1, ssVersion) : NameType.CELL;
NameType part2refType = isA1Style ? classifyCellReference(refStrPart2, ssVersion) : getR1C1CellType(refStrPart2);
switch (part2refType) {
case BAD_CELL_OR_NAMED_RANGE:
return ErrorEval.REF_INVALID;
@@ -573,4 +573,23 @@ public final class OperationEvaluationContext {
throw new IllegalArgumentException(relativeReference + " is not a valid R1C1 reference");
}
}

private static NameType getR1C1CellType(String str) {
String upRef = str.toUpperCase(LocaleUtil.getUserLocale());
int rpos = upRef.indexOf('R');
int cpos = upRef.indexOf('C');
if (rpos != -1) {
if (cpos == -1) {
return NameType.ROW;
} else {
return NameType.CELL;
}
} else {
if (cpos == -1) {
return NameType.BAD_CELL_OR_NAMED_RANGE;
} else {
return NameType.COLUMN;
}
}
}
}

Chargement…
Annuler
Enregistrer