From: PJ Fanning Date: Mon, 21 Feb 2022 13:37:35 +0000 (+0000) Subject: fix issue X-Git-Tag: REL_5_2_1~44 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c0dc2e51ce215db532e37c756044fa562f71d742;p=poi.git fix issue git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898276 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/poi/src/main/java/org/apache/poi/ss/formula/OperationEvaluationContext.java b/poi/src/main/java/org/apache/poi/ss/formula/OperationEvaluationContext.java index 1901ec7e4f..bdadbfad42 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/OperationEvaluationContext.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/OperationEvaluationContext.java @@ -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; + } + } + } }