diff --git a/src/plugins/core/range.ts b/src/plugins/core/range.ts index dec500a574..7daad383d1 100644 --- a/src/plugins/core/range.ts +++ b/src/plugins/core/range.ts @@ -357,7 +357,7 @@ export class RangeAdapter implements CommandHandler { let sheetName: string = ""; if (prefixSheet) { if (rangeImpl.invalidSheetName) { - sheetName = rangeImpl.invalidSheetName; + sheetName = getCanonicalSheetName(rangeImpl.invalidSheetName); } else { sheetName = getCanonicalSheetName(this.getters.getSheetName(rangeImpl.sheetId)); } diff --git a/tests/model/model_import_export.test.ts b/tests/model/model_import_export.test.ts index d93f5dae13..0e07da665a 100644 --- a/tests/model/model_import_export.test.ts +++ b/tests/model/model_import_export.test.ts @@ -287,7 +287,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"); @@ -298,7 +298,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 afeae2ce24..b0ec166d0b 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) => {