diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 12fe3c9..fdd6eac 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -236,7 +236,7 @@ _cellValue = dtTest.ToOADate().ToString(); } else if ( - value is sbyte + value is sbyte || value is byte || value is short || value is ushort @@ -249,13 +249,22 @@ || value is decimal ) { - _dataType = XLCellValues.Number; - _cellValue = value.ToString(); + if (value is double && !Double.IsNaN((Double)Convert.ChangeType(value, typeof (Double))) + && !Double.IsInfinity((Double)Convert.ChangeType(value, typeof (Double)))) + { + _dataType = XLCellValues.Number; + _cellValue = value.ToString(); + } + else + { + _cellValue = value.ToString(); + _dataType = XLCellValues.Text; + } } else if (value is Boolean) { _dataType = XLCellValues.Boolean; - _cellValue = (Boolean)Convert.ChangeType(value, typeof (Boolean)) ? "1" : "0"; + _cellValue = (Boolean)Convert.ChangeType(value, typeof(Boolean)) ? "1" : "0"; } else { diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs index 5451098..4e174c5 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs @@ -1,4 +1,5 @@ -using ClosedXML.Excel; +using System.Collections.Generic; +using ClosedXML.Excel; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Linq; using System; @@ -274,5 +275,26 @@ Assert.AreNotEqual(XLCellValues.Number, cell.DataType); } + + [TestMethod] + public void Double_NaN_is_a_string() + { + var ws = new XLWorkbook().Worksheets.Add("Sheet1"); + var cell = ws.Cell("A1"); + var doubleList = new List {0.0/0.0}; + + cell.Value = doubleList.AsEnumerable(); + Assert.AreNotEqual(XLCellValues.Number, cell.DataType); + } + [TestMethod] + public void Double_Infinity_is_a_string() + { + var ws = new XLWorkbook().Worksheets.Add("Sheet1"); + var cell = ws.Cell("A1"); + var doubleList = new List { 1.0 / 0.0 }; + + cell.Value = doubleList.AsEnumerable(); + Assert.AreNotEqual(XLCellValues.Number, cell.DataType); + } } } \ No newline at end of file