diff --git a/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML.csproj index b17bde2..f89efcf 100644 --- a/ClosedXML/ClosedXML.csproj +++ b/ClosedXML/ClosedXML.csproj @@ -50,6 +50,9 @@ ..\packages\DocumentFormat.OpenXml.2.7.2\lib\net40\DocumentFormat.OpenXml.dll True + + ..\packages\ExcelNumberFormat.1.0.2\lib\net20\ExcelNumberFormat.dll + ..\packages\FastMember.Signed.1.1.0\lib\net40\FastMember.Signed.dll True @@ -99,6 +102,7 @@ + diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 39e00c1..bab7ff5 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -320,36 +320,36 @@ cValue = _cellValue; } + var format = GetFormat(); + if (_dataType == XLDataType.Boolean) - return (cValue != "0").ToString(); - if (_dataType == XLDataType.TimeSpan) - return cValue; - if (_dataType == XLDataType.DateTime || IsDateFormat()) + return (cValue != "0").ToExcelFormat(format); + + else if (_dataType == XLDataType.TimeSpan || _dataType == XLDataType.DateTime || IsDateFormat()) { double dTest; if (Double.TryParse(cValue, XLHelper.NumberStyle, XLHelper.ParseCulture, out dTest) && dTest.IsValidOADateNumber()) { - var format = GetFormat(); - return DateTime.FromOADate(dTest).ToString(format); + return DateTime.FromOADate(dTest).ToExcelFormat(format); } return cValue; } - if (_dataType == XLDataType.Number) + else if (_dataType == XLDataType.Number) { double dTest; if (Double.TryParse(cValue, XLHelper.NumberStyle, XLHelper.ParseCulture, out dTest)) { - var format = GetFormat(); - return dTest.ToString(format); + return dTest.ToExcelFormat(format); } return cValue; } - return cValue; + else + return cValue; } public object Value diff --git a/ClosedXML/Extensions/FormatExtensions.cs b/ClosedXML/Extensions/FormatExtensions.cs new file mode 100644 index 0000000..4a183bb --- /dev/null +++ b/ClosedXML/Extensions/FormatExtensions.cs @@ -0,0 +1,17 @@ +using ExcelNumberFormat; +using System.Globalization; + +namespace ClosedXML.Extensions +{ + internal static class FormatExtensions + { + public static string ToExcelFormat(this object o, string format) + { + var nf = new NumberFormat(format); + if (!nf.IsValid) + return format; + + return nf.Format(o, CultureInfo.InvariantCulture); + } + } +} diff --git a/ClosedXML/packages.config b/ClosedXML/packages.config index bed0dd7..0eee0fc 100644 --- a/ClosedXML/packages.config +++ b/ClosedXML/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file