diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs
index ac179bb..9e398e2 100644
--- a/ClosedXML/Excel/Cells/XLCell.cs
+++ b/ClosedXML/Excel/Cells/XLCell.cs
@@ -241,7 +241,7 @@
var dtTest = (DateTime)Convert.ChangeType(value, typeof (DateTime));
Style.NumberFormat.NumberFormatId = dtTest.Date == dtTest ? 14 : 22;
- _cellValue = dtTest.ToOADate().ToString(XLHelper.ParseCulture);
+ _cellValue = dtTest.ToOADate().ToInvariantString();
}
else if (
value is sbyte
@@ -266,7 +266,7 @@
else
{
_dataType = XLCellValues.Number;
- _cellValue = ((Double)Convert.ChangeType(value, typeof (Double))).ToString(XLHelper.ParseCulture);
+ _cellValue = ((Double)Convert.ChangeType(value, typeof (Double))).ToInvariantString();
}
}
else if (value is Boolean)
@@ -813,9 +813,9 @@
DateTime dtTest;
double dblTest;
if (DateTime.TryParse(_cellValue, out dtTest))
- _cellValue = dtTest.ToOADate().ToString(XLHelper.ParseCulture);
+ _cellValue = dtTest.ToOADate().ToInvariantString();
else if (Double.TryParse(_cellValue, XLHelper.NumberStyle, XLHelper.ParseCulture, out dblTest))
- _cellValue = dblTest.ToString(XLHelper.ParseCulture);
+ _cellValue = dblTest.ToInvariantString();
else
{
throw new ArgumentException(
@@ -1621,7 +1621,7 @@
else if (value is DateTime)
val = ((DateTime)value).ToString("o");
else if (value is double)
- val = ((double)value).ToString(XLHelper.ParseCulture);
+ val = ((double)value).ToInvariantString();
else
val = value.ToString();
_richText = null;
@@ -1669,11 +1669,11 @@
DateTime forMillis;
if (value is DateTime && (forMillis = (DateTime)value).Millisecond > 0)
{
- val = forMillis.ToOADate().ToString(XLHelper.ParseCulture);
+ val = forMillis.ToOADate().ToInvariantString();
}
else
{
- val = dtTest.ToOADate().ToString(XLHelper.ParseCulture);
+ val = dtTest.ToOADate().ToInvariantString();
}
}
diff --git a/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/Excel/XLWorkbook_Load.cs
index 58fa9ba..6aa64ab 100644
--- a/ClosedXML/Excel/XLWorkbook_Load.cs
+++ b/ClosedXML/Excel/XLWorkbook_Load.cs
@@ -950,7 +950,7 @@
else if (cell.DataType == CellValues.Date)
{
if (!XLHelper.IsNullOrWhiteSpace(cell.CellValue.Text))
- xlCell._cellValue = Double.Parse(cell.CellValue.Text, CultureInfo.InvariantCulture).ToString(XLHelper.ParseCulture);
+ xlCell._cellValue = Double.Parse(cell.CellValue.Text, CultureInfo.InvariantCulture).ToInvariantString();
xlCell._dataType = XLCellValues.DateTime;
}
else if (cell.DataType == CellValues.Boolean)
@@ -961,7 +961,7 @@
else if (cell.DataType == CellValues.Number)
{
if (!XLHelper.IsNullOrWhiteSpace(cell.CellValue.Text))
- xlCell._cellValue = Double.Parse(cell.CellValue.Text, CultureInfo.InvariantCulture).ToString(XLHelper.ParseCulture);
+ xlCell._cellValue = Double.Parse(cell.CellValue.Text, CultureInfo.InvariantCulture).ToInvariantString();
if (s == null)
{
xlCell._dataType = XLCellValues.Number;
@@ -987,7 +987,7 @@
{
var numberFormatId = ((CellFormat) (s.CellFormats).ElementAt(styleIndex)).NumberFormatId;
if (!XLHelper.IsNullOrWhiteSpace(cell.CellValue.Text))
- xlCell._cellValue = Double.Parse(cell.CellValue.Text, CultureInfo.InvariantCulture).ToString(XLHelper.ParseCulture);
+ xlCell._cellValue = Double.Parse(cell.CellValue.Text, CultureInfo.InvariantCulture).ToInvariantString();
if (s.NumberingFormats != null &&
s.NumberingFormats.Any(nf => ((NumberingFormat) nf).NumberFormatId.Value == numberFormatId))
{
diff --git a/ClosedXML_Examples/ClosedXML_Examples.csproj b/ClosedXML_Examples/ClosedXML_Examples.csproj
index 9cd5941..2d3008d 100644
--- a/ClosedXML_Examples/ClosedXML_Examples.csproj
+++ b/ClosedXML_Examples/ClosedXML_Examples.csproj
@@ -72,6 +72,7 @@
+
diff --git a/ClosedXML_Examples/Creating/CreateFiles.cs b/ClosedXML_Examples/Creating/CreateFiles.cs
index 956a13d..2b94f60 100644
--- a/ClosedXML_Examples/Creating/CreateFiles.cs
+++ b/ClosedXML_Examples/Creating/CreateFiles.cs
@@ -27,6 +27,7 @@
new InsertColumns().Create(Path.Combine(path, "InsertColumns.xlsx"));
new ColumnCollection().Create(Path.Combine(path, "ColumnCollection.xlsx"));
new DataTypes().Create(Path.Combine(path, "DataTypes.xlsx"));
+ new DataTypesUnderDifferentCulture().Create(Path.Combine(path, "DataTypesUnderDifferentCulture.xlsx"));
new MultipleSheets().Create(Path.Combine(path, "MultipleSheets.xlsx"));
new RowCollection().Create(Path.Combine(path, "RowCollection.xlsx"));
new DefiningRanges().Create(Path.Combine(path, "DefiningRanges.xlsx"));
diff --git a/ClosedXML_Examples/Misc/DataTypesUnderDifferentCulture.cs b/ClosedXML_Examples/Misc/DataTypesUnderDifferentCulture.cs
new file mode 100644
index 0000000..4b77144
--- /dev/null
+++ b/ClosedXML_Examples/Misc/DataTypesUnderDifferentCulture.cs
@@ -0,0 +1,35 @@
+using System;
+using ClosedXML.Excel;
+using System.Threading;
+using System.Globalization;
+using System.IO;
+
+namespace ClosedXML_Examples.Misc
+{
+ public class DataTypesUnderDifferentCulture : IXLExample
+ {
+ public void Create(string filePath)
+ {
+ var backupCulture = Thread.CurrentThread.CurrentCulture;
+
+ // Set thread culture to French, which should format numbers using decimal COMMA
+ Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
+
+ string tempFile = ExampleHelper.GetTempFilePath(filePath);
+ try
+ {
+ new DataTypes().Create(tempFile);
+ var workbook = new XLWorkbook(tempFile);
+ workbook.SaveAs(filePath);
+ }
+ finally
+ {
+ Thread.CurrentThread.CurrentCulture = backupCulture;
+ if (File.Exists(tempFile))
+ {
+ File.Delete(tempFile);
+ }
+ }
+ }
+ }
+}
diff --git a/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML_Tests/ClosedXML_Tests.csproj
index 0d280d1..6b9f310 100644
--- a/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -143,6 +143,7 @@
+
diff --git a/ClosedXML_Tests/Examples/MiscTests.cs b/ClosedXML_Tests/Examples/MiscTests.cs
index 2433aab..38f7e8e 100644
--- a/ClosedXML_Tests/Examples/MiscTests.cs
+++ b/ClosedXML_Tests/Examples/MiscTests.cs
@@ -74,6 +74,12 @@
}
[Test]
+ public void DataTypesUnderDifferentCulture()
+ {
+ TestHelper.RunTestExample(@"Misc\DataTypesUnderDifferentCulture.xlsx");
+ }
+
+ [Test]
public void DataValidation()
{
TestHelper.RunTestExample(@"Misc\DataValidation.xlsx");
diff --git a/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx b/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx
new file mode 100644
index 0000000..ca68eee
--- /dev/null
+++ b/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx
Binary files differ