diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 15d39f5..625c7a2 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -586,51 +586,60 @@ { FormulaA1 = String.Empty; String val = value.ToString(); - Double dTest; - DateTime dtTest; - Boolean bTest; - TimeSpan tsTest; - if (val.Length > 0 && val.Substring(0, 1) == "'") - { - val = val.Substring(1, val.Length - 1); - dataType = XLCellValues.Text; - if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) - Style.Alignment.WrapText = true; - } - else if (value is TimeSpan || (TimeSpan.TryParse(val, out tsTest) && !Double.TryParse(val, out dTest))) - { - dataType = XLCellValues.TimeSpan; - if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) - Style.NumberFormat.NumberFormatId = 46; - } - else if (Double.TryParse(val, out dTest)) - { - dataType = XLCellValues.Number; - } - else if (DateTime.TryParse(val, out dtTest)) - { - dataType = XLCellValues.DateTime; - if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) - if (dtTest.Date == dtTest) - Style.NumberFormat.NumberFormatId = 14; - else - Style.NumberFormat.NumberFormatId = 22; - - val = dtTest.ToOADate().ToString(); - } - else if (Boolean.TryParse(val, out bTest)) + if (val.Length > 0) { - dataType = XLCellValues.Boolean; - val = bTest ? "1" : "0"; - } - else - { - dataType = XLCellValues.Text; - if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) - Style.Alignment.WrapText = true; - } + Double dTest; + DateTime dtTest; + Boolean bTest; + TimeSpan tsTest; + if (style.NumberFormat.Format == "@") + { + dataType = XLCellValues.Text; + if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + Style.Alignment.WrapText = true; + } + else if (val[0] == '\'') + { + val = val.Substring(1, val.Length - 1); + dataType = XLCellValues.Text; + if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + Style.Alignment.WrapText = true; + } + else if (value is TimeSpan || (TimeSpan.TryParse(val, out tsTest) && !Double.TryParse(val, out dTest))) + { + dataType = XLCellValues.TimeSpan; + if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) + Style.NumberFormat.NumberFormatId = 46; + } + else if (Double.TryParse(val, out dTest)) + { + dataType = XLCellValues.Number; + } + else if (DateTime.TryParse(val, out dtTest)) + { + dataType = XLCellValues.DateTime; + if (Style.NumberFormat.Format == String.Empty && Style.NumberFormat.NumberFormatId == 0) + if (dtTest.Date == dtTest) + Style.NumberFormat.NumberFormatId = 14; + else + Style.NumberFormat.NumberFormatId = 22; + + val = dtTest.ToOADate().ToString(); + } + else if (Boolean.TryParse(val, out bTest)) + { + dataType = XLCellValues.Boolean; + val = bTest ? "1" : "0"; + } + else + { + dataType = XLCellValues.Text; + if (val.Contains(Environment.NewLine) && !Style.Alignment.WrapText) + Style.Alignment.WrapText = true; + } + } cellValue = val; } diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataTypes.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataTypes.cs index bebe5f5..43fb888 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataTypes.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/DataTypes.cs @@ -87,6 +87,14 @@ ws.Cell(++ro, co).Value = "Number as Text:"; ws.Cell(ro, co + 1).Value = "'123.45"; + ws.Cell(++ro, co).Value = "Number with @ format:"; + ws.Cell(ro, co + 1).Style.NumberFormat.Format = "@"; + ws.Cell(ro, co + 1).Value = 123.45; + + ws.Cell(++ro, co).Value = "Format number with @:"; + ws.Cell(ro, co + 1).Value = 123.45; + ws.Cell(ro, co + 1).Style.NumberFormat.Format = "@"; + ws.Cell(++ro, co).Value = "TimeSpan as Text:"; ws.Cell(ro, co + 1).Value = "'" + new TimeSpan(33, 45, 22).ToString(); @@ -132,6 +140,11 @@ ws.Cell(ro, co + 1).Value = "'123.45"; ws.Cell(ro, co + 1).DataType = XLCellValues.Number; + ws.Cell(++ro, co).Value = "@ format to Number:"; + ws.Cell(ro, co + 1).Style.NumberFormat.Format = "@"; + ws.Cell(ro, co + 1).Value = 123.45; + ws.Cell(ro, co + 1).DataType = XLCellValues.Number; + ws.Cell(++ro, co).Value = "Text to TimeSpan:"; ws.Cell(ro, co + 1).Value = "'" + new TimeSpan(33, 45, 22).ToString(); ws.Cell(ro, co + 1).DataType = XLCellValues.TimeSpan;