From 42e0a3662ebd5ed9de8598777ed2b1f2857e67fd Mon Sep 17 00:00:00 2001 From: ABykiev Date: Fri, 15 Sep 2023 21:42:56 +0300 Subject: [PATCH] Copy RepeatingRows and RepeatingColumns This PR fixes #1182 Because RepeatingRows and RepeatingColumns are part of the Workbook, they're not serialized during creating a copy of the sheet. Just copy them manually --- ooxml/XSSF/UserModel/XSSFWorkbook.cs | 6 ++++ .../ooxml/XSSF/UserModel/TestXSSFSheet.cs | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/ooxml/XSSF/UserModel/XSSFWorkbook.cs b/ooxml/XSSF/UserModel/XSSFWorkbook.cs index 58518cc62..9c52d820e 100644 --- a/ooxml/XSSF/UserModel/XSSFWorkbook.cs +++ b/ooxml/XSSF/UserModel/XSSFWorkbook.cs @@ -661,6 +661,12 @@ public ISheet CloneSheet(int sheetNum, String newName) ct.UnsetPageSetup(); } + if (srcSheet.RepeatingRows != null) + clonedSheet.RepeatingRows = srcSheet.RepeatingRows; + + if (srcSheet.RepeatingColumns != null) + clonedSheet.RepeatingColumns = srcSheet.RepeatingColumns; + clonedSheet.IsSelected = (false); // clone the sheet drawing alongs with its relationships diff --git a/testcases/ooxml/XSSF/UserModel/TestXSSFSheet.cs b/testcases/ooxml/XSSF/UserModel/TestXSSFSheet.cs index 065de81f1..4e1adca6a 100644 --- a/testcases/ooxml/XSSF/UserModel/TestXSSFSheet.cs +++ b/testcases/ooxml/XSSF/UserModel/TestXSSFSheet.cs @@ -2078,6 +2078,7 @@ private void AddComments(ICreationHelper helper, ISheet sheet) cell.CellComment = comment; } } + [Test] public void TestCoordinate() { @@ -2118,5 +2119,35 @@ public void TestCoordinate() Assert.IsTrue(sa.To.rowOff == anchor.To.rowOff, /**/"To.rowOff [{0}]({1}={2})", new object[] { shape.Name, sa.To.rowOff, anchor.To.rowOff }); } } + + + [Test] + public void TestCopyRepeatingRowsAndColumns() + { + using (var book = new XSSFWorkbook()) + { + var sheet = book.CreateSheet("Sheet1"); + + var row1 = sheet.CreateRow(0); + row1.CreateCell(0); + + var row2 = sheet.CreateRow(1); + row2.CreateCell(0); + + sheet.RepeatingRows = CellRangeAddress.ValueOf("1:1"); + sheet.RepeatingColumns = CellRangeAddress.ValueOf("A1:B1"); + + var clonedSheet = book.CloneSheet(0); + + Assert.IsNotNull(clonedSheet.RepeatingRows, "RepeatingRows is null"); + Assert.AreEqual(clonedSheet.RepeatingRows.FirstRow, sheet.RepeatingRows.FirstRow, "RepeatingRows.FirstRow are not equal"); + Assert.AreEqual(clonedSheet.RepeatingRows.LastRow, sheet.RepeatingRows.LastRow, "RepeatingRows.LastRow are not equal"); + + Assert.IsNotNull(clonedSheet.RepeatingColumns, "RepeatingColumns is null"); + Assert.AreEqual(clonedSheet.RepeatingColumns.FirstColumn, sheet.RepeatingColumns.FirstColumn, "RepeatingColumns.FirstColumn are not equal"); + Assert.AreEqual(clonedSheet.RepeatingColumns.LastColumn, sheet.RepeatingColumns.LastColumn, "RepeatingColumns.LastColumn are not equal"); + + } + } } }