diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index faf129b..cb17466 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -1,4 +1,4 @@ -using FastMember; +using FastMember; using System; using System.Collections; using System.Collections.Generic; @@ -438,6 +438,8 @@ if (value as XLCells != null) throw new ArgumentException("Cannot assign IXLCells object to the cell value."); + if (SetTableHeader(value)) return; + if (SetRangeRows(value)) return; if (SetRangeColumns(value)) return; @@ -1450,6 +1452,23 @@ #endregion IXLStylized Members + private bool SetTableHeader(object value) + { + foreach (var table in Worksheet.Tables.Where(t => t.ShowHeaderRow)) + { + var cells = table.HeadersRow().CellsUsed(c => c.Address.Equals(this.Address)); + if (cells.Any()) + { + var oldName = cells.First().GetString(); + var field = table.Field(oldName); + field.Name = value.ToString(); + return true; + } + } + + return false; + } + private bool SetRangeColumns(object value) { var columns = value as XLRangeColumns; diff --git a/ClosedXML/Excel/Tables/XLTable.cs b/ClosedXML/Excel/Tables/XLTable.cs index 51bfac7..e6196fc 100644 --- a/ClosedXML/Excel/Tables/XLTable.cs +++ b/ClosedXML/Excel/Tables/XLTable.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -106,6 +106,16 @@ } } + internal void RenameField(String oldName, String newName) + { + if (!_fieldNames.ContainsKey(oldName)) + throw new ArgumentException("The field does not exist in this table", "oldName"); + + var field = _fieldNames[oldName]; + _fieldNames.Remove(oldName); + _fieldNames.Add(newName, field); + } + internal String RelId { get; set; } diff --git a/ClosedXML/Excel/Tables/XLTableField.cs b/ClosedXML/Excel/Tables/XLTableField.cs index 744700f..89ee2bb 100644 --- a/ClosedXML/Excel/Tables/XLTableField.cs +++ b/ClosedXML/Excel/Tables/XLTableField.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace ClosedXML.Excel { @@ -26,6 +26,7 @@ if (table.ShowHeaderRow) table.HeadersRow().Cell(Index + 1).SetValue(value); + table.RenameField(name, value); name = value; } } diff --git a/ClosedXML_Tests/Excel/Tables/TablesTests.cs b/ClosedXML_Tests/Excel/Tables/TablesTests.cs index ddc7b84..04ebebf 100644 --- a/ClosedXML_Tests/Excel/Tables/TablesTests.cs +++ b/ClosedXML_Tests/Excel/Tables/TablesTests.cs @@ -1,4 +1,4 @@ -using ClosedXML.Attributes; +using ClosedXML.Attributes; using ClosedXML.Excel; using NUnit.Framework; using System; @@ -333,8 +333,8 @@ [Test] public void ChangeFieldName() { - XLWorkbook wb = new XLWorkbook(); - + using (var wb = new XLWorkbook()) + { var ws = wb.AddWorksheet("Sheet"); ws.Cell("A1").SetValue("FName") .CellBelow().SetValue("John"); @@ -361,6 +361,13 @@ tbl.SetShowHeaderRow(true); nameAfter = tbl.Cell("B1").Value.ToString(); Assert.AreEqual("LastNameChanged", nameAfter); + + var field = tbl.Field("LastNameChanged"); + Assert.AreEqual("LastNameChanged", field.Name); + + tbl.Cell(1, 1).Value = "FirstName"; + Assert.AreEqual("FirstName", tbl.Field(0).Name); } } } +}