From 5993a07422b6ace5230f562551f014180a83515a Mon Sep 17 00:00:00 2001 From: jaby Date: Tue, 14 Jul 2020 17:05:43 +0200 Subject: Fix issue 665 (#666) --- calc.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'calc.go') diff --git a/calc.go b/calc.go index 86f7cff..f86b12c 100644 --- a/calc.go +++ b/calc.go @@ -453,11 +453,28 @@ func isOperatorPrefixToken(token efp.Token) bool { return false } +func (f *File) getDefinedNameRefTo(definedNameName string, currentSheet string) (refTo string) { + for _, definedName := range f.GetDefinedName() { + if definedName.Name == definedNameName { + refTo = definedName.RefersTo + // worksheet scope takes precedence over scope workbook when both definedNames exist + if definedName.Scope == currentSheet { + break + } + } + } + return refTo +} + // parseToken parse basic arithmetic operator priority and evaluate based on // operators and operands. func (f *File) parseToken(sheet string, token efp.Token, opdStack, optStack *Stack) error { // parse reference: must reference at here if token.TSubType == efp.TokenSubTypeRange { + refTo := f.getDefinedNameRefTo(token.TValue, sheet) + if refTo != "" { + token.TValue = refTo + } result, err := f.parseReference(sheet, token.TValue) if err != nil { return errors.New(formulaErrorNAME) -- cgit v1.2.1