diff --git a/src/plugins/core/borders.ts b/src/plugins/core/borders.ts index 867ba87368..aa036bff35 100644 --- a/src/plugins/core/borders.ts +++ b/src/plugins/core/borders.ts @@ -355,10 +355,10 @@ export class BordersPlugin extends CorePlugin implements Bor // existingBorderSideToClear[side] = true means we should clear the border on that // side of the existing adjacent zone before adding the new border. const existingBorderSideToClear = { - left: force || !!newBorder?.right, - right: force || !!newBorder?.left, - top: force || !!newBorder?.bottom, - bottom: force || !!newBorder?.top, + left: !!newBorder?.right, + right: !!newBorder?.left, + top: !!newBorder?.bottom, + bottom: !!newBorder?.top, }; let editingZone: Zone[] = [zone]; for (const existingBorder of this.borders[sheetId] ?? []) { diff --git a/tests/borders/border_plugin.test.ts b/tests/borders/border_plugin.test.ts index 90548bc92e..6fcd99e1fe 100644 --- a/tests/borders/border_plugin.test.ts +++ b/tests/borders/border_plugin.test.ts @@ -11,6 +11,7 @@ import { deleteCells, deleteColumns, deleteRows, + merge, moveColumns, moveRows, paste, @@ -201,6 +202,22 @@ describe("borders", () => { }); }); + test("import preserves merged cell borders", () => { + const b = DEFAULT_BORDER_DESC; + const allSides = { top: b, bottom: b, left: b, right: b }; + const model = new Model(); + + setZoneBorders(model, { position: "all" }, ["B2:C3"]); + merge(model, "C2:C3"); + + const importedModel = new Model(model.exportData()); + + expect(getBorder(importedModel, "B2")).toEqual(allSides); + expect(getBorder(importedModel, "B3")).toEqual(allSides); + expect(getBorder(importedModel, "C2")).toEqual({ top: b, right: b }); + expect(getBorder(importedModel, "C3")).toEqual({ bottom: b, right: b }); + }); + test("can set all borders in a zone", () => { const model = new Model();