diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 8aaea02..a0c8846 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; @@ -1487,6 +1489,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 3a3bc84..076a2a8 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..1190f9e 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,34 +333,41 @@ [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"); - var ws = wb.AddWorksheet("Sheet"); - ws.Cell("A1").SetValue("FName") - .CellBelow().SetValue("John"); + ws.Cell("B1").SetValue("LName") + .CellBelow().SetValue("Doe"); - ws.Cell("B1").SetValue("LName") - .CellBelow().SetValue("Doe"); + var tbl = ws.RangeUsed().CreateTable(); + var nameBefore = tbl.Field(tbl.Fields.Last().Index).Name; + tbl.Field(tbl.Fields.Last().Index).Name = "LastName"; + var nameAfter = tbl.Field(tbl.Fields.Last().Index).Name; - var tbl = ws.RangeUsed().CreateTable(); - var nameBefore = tbl.Field(tbl.Fields.Last().Index).Name; - tbl.Field(tbl.Fields.Last().Index).Name = "LastName"; - var nameAfter = tbl.Field(tbl.Fields.Last().Index).Name; + var cellValue = ws.Cell("B1").GetString(); - var cellValue = ws.Cell("B1").GetString(); + Assert.AreEqual("LName", nameBefore); + Assert.AreEqual("LastName", nameAfter); + Assert.AreEqual("LastName", cellValue); - Assert.AreEqual("LName", nameBefore); - Assert.AreEqual("LastName", nameAfter); - Assert.AreEqual("LastName", cellValue); + tbl.ShowHeaderRow = false; + tbl.Field(tbl.Fields.Last().Index).Name = "LastNameChanged"; + nameAfter = tbl.Field(tbl.Fields.Last().Index).Name; + Assert.AreEqual("LastNameChanged", nameAfter); - tbl.ShowHeaderRow = false; - tbl.Field(tbl.Fields.Last().Index).Name = "LastNameChanged"; - nameAfter = tbl.Field(tbl.Fields.Last().Index).Name; - Assert.AreEqual("LastNameChanged", nameAfter); + tbl.SetShowHeaderRow(true); + nameAfter = tbl.Cell("B1").Value.ToString(); + Assert.AreEqual("LastNameChanged", nameAfter); - 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); + } } } }