summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjaby <peter.de.velder@ilias-solutions.com>2021-06-07 12:49:20 +0200
committerGitHub <noreply@github.com>2021-06-07 18:49:20 +0800
commit2c90b3f53559076af661e3aebabfad9643a77c40 (patch)
treecf1cf66442ac1bd66df4fd6f5bb55ca9060c3d63
parentd932e62a127da177769ec3f35aae985ca0a516db (diff)
fixes #856 (#857)
-rw-r--r--calc.go4
-rw-r--r--calc_test.go7
2 files changed, 11 insertions, 0 deletions
diff --git a/calc.go b/calc.go
index 573abf2..146573c 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 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) {