diff --git a/calc.go b/calc.go index 573abf2b47..146573cdb9 100644 --- a/calc.go +++ b/calc.go @@ -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 23568ff5c3..22b90e69d2 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, "", result, "=defined_name1") + } func TestCalcArithmeticOperations(t *testing.T) {