From c0dc2e51ce215db532e37c756044fa562f71d742 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 21 Feb 2022 13:37:35 +0000 Subject: [PATCH] fix issue git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898276 13f79535-47bb-0310-9956-ffa450edef68 --- .../formula/OperationEvaluationContext.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) 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; + } + } + } } -- 2.39.5