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);
+ }
+ }
+ }
+}