diff options
author | jaby <peter.de.velder@ilias-solutions.com> | 2020-07-14 17:05:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-14 23:05:43 +0800 |
commit | 5993a07422b6ace5230f562551f014180a83515a (patch) | |
tree | 2429c3a1d2b151fd40587807c75b7c110bb4fe75 /calc.go | |
parent | 0aa15106947965bdae9daae7571a4a3f569bf32d (diff) |
Fix issue 665 (#666)
Diffstat (limited to 'calc.go')
-rw-r--r-- | calc.go | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -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) |