diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index f622f4a..e901eb3 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -225,6 +225,7 @@ { FormulaA1 = String.Empty; _richText = null; + var style = GetStyleForRead(); if (value is String || value is char) { _cellValue = value.ToString(); @@ -236,13 +237,15 @@ { _cellValue = value.ToString(); _dataType = XLCellValues.TimeSpan; - Style.NumberFormat.NumberFormatId = 46; + if (style.NumberFormat.Format == String.Empty && style.NumberFormat.NumberFormatId == 0) + Style.NumberFormat.NumberFormatId = 46; } else if (value is DateTime) { _dataType = XLCellValues.DateTime; var dtTest = (DateTime)Convert.ChangeType(value, typeof (DateTime)); - Style.NumberFormat.NumberFormatId = dtTest.Date == dtTest ? 14 : 22; + if (style.NumberFormat.Format == String.Empty && style.NumberFormat.NumberFormatId == 0) + Style.NumberFormat.NumberFormatId = dtTest.Date == dtTest ? 14 : 22; _cellValue = dtTest.ToOADate().ToInvariantString(); } @@ -1671,7 +1674,6 @@ val = dtTest.ToOADate().ToInvariantString(); } } - } else if (Boolean.TryParse(val, out bTest)) { diff --git a/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML_Tests/ClosedXML_Tests.csproj index 6f5439f..eabbee3 100644 --- a/ClosedXML_Tests/ClosedXML_Tests.csproj +++ b/ClosedXML_Tests/ClosedXML_Tests.csproj @@ -104,6 +104,7 @@ + diff --git a/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs b/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs new file mode 100644 index 0000000..cf3aa2b --- /dev/null +++ b/ClosedXML_Tests/Excel/Styles/NumberFormatTests.cs @@ -0,0 +1,33 @@ +using ClosedXML.Excel; +using NUnit.Framework; +using System; +using System.Data; +using System.Linq; + +namespace ClosedXML_Tests.Excel +{ + public class NumberFormatTests + { + [Test] + public void PreserveCellFormat() + { + using (var wb = new XLWorkbook()) + { + var ws = wb.AddWorksheet("Sheet1"); + ws.Column(1).Style.NumberFormat.Format = "yy-MM-dd"; + + var table = new DataTable(); + table.Columns.Add("Date", typeof(DateTime)); + + for (int i = 0; i < 10; i++) + { + table.Rows.Add(new DateTime(2017, 1, 1).AddMonths(i)); + } + + ws.Cell("A1").InsertData(table.AsEnumerable()); + + Assert.AreEqual("yy-MM-dd", ws.Cell("A5").Style.DateFormat.Format); + } + } + } +}