diff --git a/src/plugins/core/range.ts b/src/plugins/core/range.ts index c71d660bf7..107165374b 100644 --- a/src/plugins/core/range.ts +++ b/src/plugins/core/range.ts @@ -405,7 +405,7 @@ export class RangeAdapter implements CommandHandler { let sheetName: string = ""; if (prefixSheet) { if (rangeImpl.invalidSheetName) { - sheetName = rangeImpl.invalidSheetName; + sheetName = getCanonicalSymbolName(rangeImpl.invalidSheetName); } else { sheetName = getCanonicalSymbolName(this.getters.getSheetName(rangeImpl.sheetId)); } diff --git a/tests/model/model_import_export.test.ts b/tests/model/model_import_export.test.ts index ea39a50866..a7ddaf3f68 100644 --- a/tests/model/model_import_export.test.ts +++ b/tests/model/model_import_export.test.ts @@ -294,7 +294,7 @@ describe("Migrations", () => { const cfs = data.sheets[1].conditionalFormats; const rule1 = cfs[0].rule as ColorScaleRule; - expect(cfs[0].ranges).toEqual(["=sheetName_!A1:A2"]); + expect(cfs[0].ranges).toEqual(["'=sheetName_'!A1:A2"]); expect(rule1.minimum.value).toEqual("=sheetName_!B1"); expect(rule1.midpoint?.value).toEqual("=sheetName_!B1"); expect(rule1.maximum.value).toEqual("=sheetName_!B1"); @@ -305,7 +305,7 @@ describe("Migrations", () => { expect(rule2.upperInflectionPoint.value).toEqual("=sheetName_!B1"); const rule3 = cfs[2].rule as ColorScaleRule; - expect(cfs[2].ranges).toEqual(["=sheetName_!A1:A2"]); + expect(cfs[2].ranges).toEqual(["'=sheetName_'!A1:A2"]); expect(rule3.minimum.value).toEqual("33"); expect(rule3.midpoint?.value).toEqual("13"); expect(rule3.maximum.value).toBeUndefined(); diff --git a/tests/range_plugin.test.ts b/tests/range_plugin.test.ts index 07204969bd..4b0f8a83c8 100644 --- a/tests/range_plugin.test.ts +++ b/tests/range_plugin.test.ts @@ -551,11 +551,16 @@ describe("range plugin", () => { } ); + test("invalid sheet name with special character", () => { + const range = m.getters.getRangeFromSheetXC("s1", "'Invalid Sheet Name'!A1"); + expect(m.getters.getRangeString(range, "s1")).toBe("'Invalid Sheet Name'!A1"); + }); + test.each([ ["s1!!!A1:A9", "'s1!!'!A1:A9"], ["'s1!!'!A1:A9", "'s1!!'!A1:A9"], - ["s1!!!A1:s1!!!A9", "s1!!!A1:s1!!!A9"], - ["s1!!!A1:s1!!!A9", "s1!!!A1:s1!!!A9"], + ["s1!!!A1:s1!!!A9", "'s1!!!A1:s1!!'!A9"], + ["s1!!!A1:s1!!!A9", "'s1!!!A1:s1!!'!A9"], ])( "xc with more than one exclamation mark does not throw error", (rangeString, expectedString) => {