diff options
author | jaby <peter.de.velder@ilias-solutions.com> | 2021-06-07 12:49:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-07 18:49:20 +0800 |
commit | 2c90b3f53559076af661e3aebabfad9643a77c40 (patch) | |
tree | cf1cf66442ac1bd66df4fd6f5bb55ca9060c3d63 | |
parent | d932e62a127da177769ec3f35aae985ca0a516db (diff) |
fixes #856 (#857)
-rw-r--r-- | calc.go | 4 | ||||
-rw-r--r-- | calc_test.go | 7 |
2 files changed, 11 insertions, 0 deletions
@@ -590,6 +590,10 @@ func (f *File) evalInfixExp(sheet, cell string, tokens []efp.Token) (efp.Token, } if nextToken.TType == efp.TokenTypeArgument || nextToken.TType == efp.TokenTypeFunction { // parse reference: reference or range at here + refTo := f.getDefinedNameRefTo(token.TValue, sheet) + if refTo != "" { + token.TValue = refTo + } result, err := f.parseReference(sheet, token.TValue) if err != nil { return efp.Token{TValue: formulaErrorNAME}, err diff --git a/calc_test.go b/calc_test.go index 23568ff..22b90e6 100644 --- a/calc_test.go +++ b/calc_test.go @@ -2335,11 +2335,18 @@ func TestCalcWithDefinedName(t *testing.T) { f := prepareCalcData(cellData) assert.NoError(t, f.SetDefinedName(&DefinedName{Name: "defined_name1", RefersTo: "Sheet1!A1", Scope: "Workbook"})) assert.NoError(t, f.SetDefinedName(&DefinedName{Name: "defined_name1", RefersTo: "Sheet1!B1", Scope: "Sheet1"})) + assert.NoError(t, f.SetCellFormula("Sheet1", "C1", "=defined_name1")) result, err := f.CalcCellValue("Sheet1", "C1") assert.NoError(t, err) // DefinedName with scope WorkSheet takes precedence over DefinedName with scope Workbook, so we should get B1 value assert.Equal(t, "B1 value", result, "=defined_name1") + + assert.NoError(t, f.SetCellFormula("Sheet1", "C1", "=CONCATENATE(\"<\",defined_name1,\">\")")) + result, err = f.CalcCellValue("Sheet1", "C1") + assert.NoError(t, err) + assert.Equal(t, "<B1 value>", result, "=defined_name1") + } func TestCalcArithmeticOperations(t *testing.T) { |