diff options
-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) { |