diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index ff402de..7cdb089 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -1883,7 +1883,7 @@ else if (value is DateTime) val = ((DateTime)value).ToString("o"); else if (value.IsNumber()) - val = Convert.ToDecimal(value).ToInvariantString(); + val = value.ToInvariantString(); else val = value.ToString(); _richText = null; diff --git a/ClosedXML/Extensions.cs b/ClosedXML/Extensions.cs index 19d108d..8836f26 100644 --- a/ClosedXML/Extensions.cs +++ b/ClosedXML/Extensions.cs @@ -351,5 +351,33 @@ || value is double || value is decimal; } + + public static string ToInvariantString(this object value) + { + if (value is sbyte) + return ((sbyte)value).ToString(CultureInfo.InvariantCulture); + else if (value is byte) + return ((byte)value).ToString(CultureInfo.InvariantCulture); + else if (value is short) + return ((short)value).ToString(CultureInfo.InvariantCulture); + else if (value is ushort) + return ((ushort)value).ToString(CultureInfo.InvariantCulture); + else if (value is int) + return ((int)value).ToString(CultureInfo.InvariantCulture); + else if (value is uint) + return ((uint)value).ToString(CultureInfo.InvariantCulture); + else if (value is long) + return ((long)value).ToString(CultureInfo.InvariantCulture); + else if (value is ulong) + return ((ulong)value).ToString(CultureInfo.InvariantCulture); + else if (value is float) + return ((float)value).ToString(CultureInfo.InvariantCulture); + else if (value is double) + return ((double)value).ToString(CultureInfo.InvariantCulture); + else if (value is decimal) + return ((decimal)value).ToString(CultureInfo.InvariantCulture); + else + return value.ToString(); + } } } diff --git a/ClosedXML_Examples/Misc/DataTypes.cs b/ClosedXML_Examples/Misc/DataTypes.cs index e50b3ba..0e2e356 100644 --- a/ClosedXML_Examples/Misc/DataTypes.cs +++ b/ClosedXML_Examples/Misc/DataTypes.cs @@ -77,6 +77,9 @@ ws.Cell(++ro, co).Value = "Double Number:"; ws.Cell(ro, co + 1).Value = 123.45d; + ws.Cell(++ro, co).Value = "Large Double Number:"; + ws.Cell(ro, co + 1).Value = 9.999E307d; + ro++; ws.Cell(++ro, co).Value = "Explicit Text:"; diff --git a/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx b/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx index 7b3e5a2..f33318d 100644 --- a/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx +++ b/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx Binary files differ diff --git a/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx b/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx index e86beba..f3bf2bf 100644 --- a/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx +++ b/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx Binary files differ