From 70c22fc136a653b48e6aa784d7445a7d66a41b44 Mon Sep 17 00:00:00 2001 From: JanKallman Date: Mon, 8 Apr 2024 09:20:34 +0200 Subject: [PATCH] Fixed an issue where ExcelRangeBase.Value returned the RichText object instead of an empty string if the RichText collection was empty. --- src/EPPlus/ExcelRangeBase.cs | 8 +++++++- src/EPPlus/ExcelWorksheet.cs | 8 +++----- src/EPPlus/Style/RichText/ExcelRichTextCollection.cs | 5 +++-- src/EPPlusTest/Core/Range/RangeRichTextTests.cs | 12 +++++++++++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/EPPlus/ExcelRangeBase.cs b/src/EPPlus/ExcelRangeBase.cs index 6bd2d7c4b..f6501c1de 100644 --- a/src/EPPlus/ExcelRangeBase.cs +++ b/src/EPPlus/ExcelRangeBase.cs @@ -1279,7 +1279,13 @@ public bool IsRichText get { IsRangeValid("richtext"); - return _worksheet._flags.GetFlagValue(_fromRow, _fromCol, CellFlags.RichText); + var isRt = _worksheet._flags.GetFlagValue(_fromRow, _fromCol, CellFlags.RichText); + if (isRt) + { + _rtc = _worksheet.GetRichText(_fromRow, _fromCol, this); + return _rtc.Count>0; + } + return isRt; } set { diff --git a/src/EPPlus/ExcelWorksheet.cs b/src/EPPlus/ExcelWorksheet.cs index ec981ec22..ff2f00a88 100644 --- a/src/EPPlus/ExcelWorksheet.cs +++ b/src/EPPlus/ExcelWorksheet.cs @@ -1443,15 +1443,14 @@ private void LoadHyperLinks(XmlReader xr) internal ExcelRichTextCollection GetRichText(int row, int col, ExcelRangeBase r = null) { var v = GetCoreValueInner(row, col); - //var isRt = _flags.GetFlagValue(row, col, CellFlags.RichText); - //if (isRt && v._value is ExcelRichTextCollection rtc) - if (v._value is ExcelRichTextCollection rtc) + var isRt = _flags.GetFlagValue(row, col, CellFlags.RichText); + if (isRt && v._value is ExcelRichTextCollection rtc) { return rtc; } else { - var text = ValueToTextHandler.GetFormattedText(v._value, Workbook, v._styleId, false); + var text = ValueToTextHandler.GetFormattedText(v._value, Workbook, v._styleId, false); if (string.IsNullOrEmpty(text)) { var item = new ExcelRichTextCollection(Workbook, r); @@ -2230,7 +2229,6 @@ public object GetValue(int Row, int Column) var v = GetValueInner(Row, Column); if (v!=null) { - //var cell = ((ExcelCell)_cells[cellID]); if (_flags.GetFlagValue(Row, Column, CellFlags.RichText)) { return (object)Cells[Row, Column].RichText.Text; diff --git a/src/EPPlus/Style/RichText/ExcelRichTextCollection.cs b/src/EPPlus/Style/RichText/ExcelRichTextCollection.cs index 063ceada8..faa5abd86 100644 --- a/src/EPPlus/Style/RichText/ExcelRichTextCollection.cs +++ b/src/EPPlus/Style/RichText/ExcelRichTextCollection.cs @@ -38,9 +38,10 @@ internal ExcelRichTextCollection(ExcelWorkbook wb, ExcelRangeBase cells) { _wb = wb; _cells = cells; - } + _cells._worksheet._flags.SetFlagValue(_cells._fromRow, _cells._fromCol, true, CellFlags.RichText); + } - internal ExcelRichTextCollection(string s, ExcelRangeBase cells) + internal ExcelRichTextCollection(string s, ExcelRangeBase cells) { _wb = cells._workbook; _cells = cells; diff --git a/src/EPPlusTest/Core/Range/RangeRichTextTests.cs b/src/EPPlusTest/Core/Range/RangeRichTextTests.cs index e1121c630..c5fc62281 100644 --- a/src/EPPlusTest/Core/Range/RangeRichTextTests.cs +++ b/src/EPPlusTest/Core/Range/RangeRichTextTests.cs @@ -183,8 +183,18 @@ public void IsRichTextShouldKeepValues() Thread.CurrentThread.CurrentCulture = ci; } - [TestMethod] + public void VerifyRichTextIsBlankIfAccess() + { + using(var p=new ExcelPackage()) + { + var ws = p.Workbook.Worksheets.Add("Sheet1"); + var t = ws.Cells["A1"].RichText.Text; + + Assert.AreEqual(string.Empty, ws.Cells["A1"].Value); + } + } + [TestMethod] public void ValidateRichText_TextIsReflectedOnRemove() { var package = new OfficeOpenXml.ExcelPackage();