diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 9e4794c..678d282 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -245,7 +245,7 @@ { string parsedValue; bool parsed; - if (value is String && acceptString || value is char || value is Guid) + if (value is String && acceptString || value is char || value is Guid || value is Enum) { parsedValue = value.ToInvariantString(); _dataType = XLDataType.Text; @@ -281,7 +281,7 @@ { parsedValue = value.ToString(); _dataType = XLDataType.Text; - parsed = parsedValue.Length == 0; + parsed = parsedValue.Length != 0; } else { @@ -292,10 +292,8 @@ } else { - // Here we specifically don't use invariant string, as we want to use the current culture to convert to string - parsedValue = value.ToString(); - _dataType = XLDataType.Text; - parsed = parsedValue.Length == 0; + parsed = false; + parsedValue = null; } return new Tuple(parsedValue, parsed); @@ -303,7 +301,11 @@ private string DeduceCellValueByParsing(string value, XLStyleValue style) { - if (value[0] == '\'') + if (String.IsNullOrEmpty(value)) + { + _dataType = XLDataType.Text; + } + else if (value[0] == '\'') { // If a user sets a cell value to a value starting with a single quote // ensure the data type is text @@ -2107,7 +2109,7 @@ if (!parsed) { // We'll have to parse it slowly :-( - parsedValue = DeduceCellValueByParsing(parsedValue.ToString(), style); + parsedValue = DeduceCellValueByParsing(value.ToString(), style); } if (SetTableHeaderValue(parsedValue)) return; diff --git a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs index 410e744..ed70e5e 100644 --- a/ClosedXML_Tests/Excel/Cells/XLCellTests.cs +++ b/ClosedXML_Tests/Excel/Cells/XLCellTests.cs @@ -367,6 +367,23 @@ } [Test] + public void SetCellValueToEnum() + { + var ws = new XLWorkbook().AddWorksheet("Sheet1"); + var dataType = XLDataType.Number; + ws.FirstCell().Value = dataType; + Assert.AreEqual(XLDataType.Text, ws.FirstCell().DataType); + Assert.AreEqual(dataType.ToString(), ws.FirstCell().Value); + Assert.AreEqual(dataType.ToString(), ws.FirstCell().GetString()); + + dataType = XLDataType.TimeSpan; + ws.FirstCell().SetValue(dataType); + Assert.AreEqual(XLDataType.Text, ws.FirstCell().DataType); + Assert.AreEqual(dataType.ToString(), ws.FirstCell().Value); + Assert.AreEqual(dataType.ToString(), ws.FirstCell().GetString()); + } + + [Test] public void ValueSetToEmptyString() { string expected = String.Empty;