diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index effcba6..73ab216 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -234,7 +234,7 @@ { xlTable._showHeaderRow = false; //foreach (var tableColumn in dTable.TableColumns.Cast()) - xlTable.AddFields(dTable.TableColumns.Cast().Select(t=>t.Name.Value)); + xlTable.AddFields(dTable.TableColumns.Cast().Select(t=>GetTableColumnName(t.Name.Value))); } else { @@ -273,16 +273,17 @@ { foreach (var tableColumn in dTable.TableColumns.Cast()) { + var tableColumnName = GetTableColumnName(tableColumn.Name.Value); if (tableColumn.TotalsRowFunction != null) - xlTable.Field(tableColumn.Name.Value).TotalsRowFunction = + xlTable.Field(tableColumnName).TotalsRowFunction = tableColumn.TotalsRowFunction.Value.ToClosedXml(); if (tableColumn.TotalsRowFormula != null) - xlTable.Field(tableColumn.Name.Value).TotalsRowFormulaA1 = + xlTable.Field(tableColumnName).TotalsRowFormulaA1 = tableColumn.TotalsRowFormula.Text; if (tableColumn.TotalsRowLabel != null) - xlTable.Field(tableColumn.Name.Value).TotalsRowLabel = tableColumn.TotalsRowLabel.Value; + xlTable.Field(tableColumnName).TotalsRowLabel = tableColumn.TotalsRowLabel.Value; } if (xlTable.AutoFilter != null) xlTable.AutoFilter.Range = xlTable.Worksheet.Range( @@ -374,6 +375,11 @@ LoadDefinedNames(workbook); } + private String GetTableColumnName(string name) + { + return name.Replace("_x000a_", Environment.NewLine).Replace("_x005f_x000a_", "_x000a_"); + } + private void LoadColorsAndLines(IXLDrawing drawing, XElement shape) { var strokeColor = shape.Attribute("strokecolor"); diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 5e08e24..82a4b48 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -1624,7 +1624,7 @@ var tableColumn1 = new TableColumn { Id = columnId, - Name = fieldName + Name = fieldName.Replace("_x000a_", "_x005f_x000a_").Replace(Environment.NewLine, "_x000a_") }; if (xlTable.ShowTotalsRow) { diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Tables/TablesTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Tables/TablesTests.cs index e044eb8..c08aedd 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Tables/TablesTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Tables/TablesTests.cs @@ -270,5 +270,57 @@ Assert.AreEqual(2, ws.Tables.First().ColumnCount()); } + + [TestMethod] + public void SavingLoadingTableWithNewLineInHeader() + { + var wb = new XLWorkbook(); + var ws = wb.AddWorksheet("Sheet1"); + var columnName = "Line1" + Environment.NewLine + "Line2"; + ws.FirstCell().SetValue(columnName) + .CellBelow().SetValue("A"); + ws.RangeUsed().CreateTable(); + using (var ms = new MemoryStream()) + { + wb.SaveAs(ms); + var wb2 = new XLWorkbook(ms); + var ws2 = wb2.Worksheet(1); + var table2 = ws2.Table(0); + var fieldName = table2.Field(0).Name; + Assert.AreEqual("Line1\nLine2", fieldName); + } + + } + + [TestMethod] + public void SavingLoadingTableWithNewLineInHeader2() + { + XLWorkbook wb = new XLWorkbook(); + var ws = wb.Worksheets.Add("Test"); + + DataTable dt = new DataTable(); + var columnName = "Line1" + Environment.NewLine + "Line2"; + dt.Columns.Add(columnName); + + DataRow dr = dt.NewRow(); + dr[columnName] = "some text"; + dt.Rows.Add(dr); + ws.Cell(1, 1).InsertTable(dt.AsEnumerable()); + + var table1 = ws.Table(0); + var fieldName1 = table1.Field(0).Name; + Assert.AreEqual(columnName, fieldName1); + + using (var ms = new MemoryStream()) + { + wb.SaveAs(ms); + var wb2 = new XLWorkbook(ms); + var ws2 = wb2.Worksheet(1); + var table2 = ws2.Table(0); + var fieldName2 = table2.Field(0).Name; + Assert.AreEqual("Line1\nLine2", fieldName2); + } + + } } }