diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index a361c4b..d3b9440 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -267,24 +267,25 @@ public T GetValue() { + var val = Value; if (!StringExtensions.IsNullOrWhiteSpace(FormulaA1)) return (T)Convert.ChangeType(String.Empty, typeof(T)); - if (Value is TimeSpan) + if (val is TimeSpan) { if (typeof(T) == typeof(String)) - return (T)Convert.ChangeType(Value.ToString(), typeof(T)); + return (T)Convert.ChangeType(val.ToString(), typeof(T)); - return (T)Value; + return (T)val; } - if (Value is IXLRichText) + if (val is IXLRichText) return (T)RichText; if (typeof(T) == typeof(String)) { - string valToUse = Value.ToString(); + string valToUse = val.ToString(); if (!utfPattern.Match(valToUse).Success) - return (T)Convert.ChangeType(Value, typeof(T)); + return (T)Convert.ChangeType(val, typeof(T)); else { var sb = new StringBuilder(); @@ -306,7 +307,7 @@ } } else - return (T)Convert.ChangeType(Value, typeof(T)); + return (T)Convert.ChangeType(val, typeof(T)); } public string GetString() @@ -406,22 +407,25 @@ return fA1; } + String cellValue = HasRichText ? _richText.ToString() : _cellValue; + + if (_dataType == XLCellValues.Boolean) - return _cellValue != "0"; + return cellValue != "0"; if (_dataType == XLCellValues.DateTime) - return DateTime.FromOADate(Double.Parse(_cellValue)); + return DateTime.FromOADate(Double.Parse(cellValue)); if (_dataType == XLCellValues.Number) - return Double.Parse(_cellValue); + return Double.Parse(cellValue); if (_dataType == XLCellValues.TimeSpan) { // return (DateTime.FromOADate(Double.Parse(cellValue)) - baseDate); - return TimeSpan.Parse(_cellValue); + return TimeSpan.Parse(cellValue); } - return _richText == null ? _cellValue : _richText.ToString(); + return cellValue; } set @@ -1039,8 +1043,6 @@ _richText = _cellValue.Length == 0 ? new XLRichText(style.Font) : new XLRichText(GetFormattedString(), style.Font); - - _dataType = XLCellValues.Text; } return _richText; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index a17545f..bdf157d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -667,12 +667,13 @@ var newStrings = new Dictionary(); var newRichStrings = new Dictionary(); - foreach (XLCell c in Worksheets.Cast().SelectMany(w => w.Internals.CellsCollection.GetCells().Where(c => c.DataType == XLCellValues.Text - && c.ShareString + foreach (XLCell c in Worksheets.Cast().SelectMany(w => w.Internals.CellsCollection.GetCells().Where(c => ((c.DataType == XLCellValues.Text && c.ShareString) || c.HasRichText) + && c.InnerText.Length > 0 && StringExtensions.IsNullOrWhiteSpace(c.FormulaA1) ))) { + c.DataType = XLCellValues.Text; if (c.HasRichText) { if (newRichStrings.ContainsKey(c.RichText)) diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/RichText/XLRichStringTest.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/RichText/XLRichStringTest.cs index 632e92e..db4f75d 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/RichText/XLRichStringTest.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/RichText/XLRichStringTest.cs @@ -164,9 +164,7 @@ Assert.AreEqual("1234", cell.GetString()); - Assert.AreEqual(XLCellValues.Text, cell.DataType); - - cell.DataType = XLCellValues.Number; + Assert.AreEqual(XLCellValues.Number, cell.DataType); Assert.AreEqual(1234.0, cell.GetDouble());