diff --git a/adjust.go b/adjust.go index f9a99236bc..7150dfcf27 100644 --- a/adjust.go +++ b/adjust.go @@ -457,20 +457,15 @@ func transformParenthesesToken(token efp.Token) string { // adjustRangeSheetName returns replaced range reference by given source and // target sheet name. func adjustRangeSheetName(rng, source, target string) string { + source = escapeSheetName(source) cellRefs := strings.Split(rng, ",") for i, cellRef := range cellRefs { rangeRefs := strings.Split(cellRef, ":") for j, rangeRef := range rangeRefs { parts := strings.Split(rangeRef, "!") for k, part := range parts { - singleQuote := strings.HasPrefix(part, "'") && strings.HasSuffix(part, "'") - if singleQuote { - part = strings.TrimPrefix(strings.TrimSuffix(part, "'"), "'") - } - if part == source { - if part = target; singleQuote { - part = "'" + part + "'" - } + if strings.TrimPrefix(strings.TrimSuffix(part, "'"), "'") == source { + part = escapeSheetName(target) } parts[k] = part } diff --git a/sheet_test.go b/sheet_test.go index 93c8a17d90..d5cc4cfa7b 100644 --- a/sheet_test.go +++ b/sheet_test.go @@ -481,6 +481,8 @@ func TestSetSheetName(t *testing.T) { assert.Equal(t, "sheet1", f.GetSheetName(0)) // Test set sheet name with invalid sheet name assert.Equal(t, f.SetSheetName("Sheet:1", "Sheet1"), ErrSheetNameInvalid) + _, err := f.NewSheet("Sheet 3") + assert.NoError(t, err) // Test set worksheet name with existing defined name and auto filter assert.NoError(t, f.AutoFilter("Sheet1", "A1:A2", nil)) @@ -496,8 +498,12 @@ func TestSetSheetName(t *testing.T) { Name: "Name3", RefersTo: "Sheet1!$A$1:'Sheet1'!A1:Sheet1!$A$1,Sheet1!A1:Sheet3!A1,Sheet3!A1", })) - assert.NoError(t, f.SetSheetName("Sheet1", "Sheet2")) - for i, expected := range []string{"'Sheet2'!$A$1:$A$2", "$B$2", "$A1$2:A2", "Sheet2!$A$1:'Sheet2'!A1:Sheet2!$A$1,Sheet2!A1:Sheet3!A1,Sheet3!A1"} { + assert.NoError(t, f.SetDefinedName(&DefinedName{ + Name: "Name4", + RefersTo: "'Sheet 3'!$A1$2:A2", + })) + assert.NoError(t, f.SetSheetName("Sheet1", "Sheet 2")) + for i, expected := range []string{"'Sheet 2'!$A$1:$A$2", "$B$2", "$A1$2:A2", "'Sheet 2'!$A$1:'Sheet 2'!A1:'Sheet 2'!$A$1,'Sheet 2'!A1:Sheet3!A1,Sheet3!A1", "'Sheet 3'!$A1$2:A2"} { assert.Equal(t, expected, f.WorkBook.DefinedNames.DefinedName[i].Data) } }