Skip to content

Commit

Permalink
#1387 - Fixed an issue where RichText wasn't set properly on a multi-…
Browse files Browse the repository at this point in the history
…cell range (#1405)
  • Loading branch information
swmal authored Apr 5, 2024
1 parent 796a4f1 commit 9dffadd
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 27 deletions.
5 changes: 3 additions & 2 deletions src/EPPlus/ExcelWorksheet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1443,8 +1443,9 @@ 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)
//var isRt = _flags.GetFlagValue(row, col, CellFlags.RichText);
//if (isRt && v._value is ExcelRichTextCollection rtc)
if (v._value is ExcelRichTextCollection rtc)
{
return rtc;
}
Expand Down
6 changes: 3 additions & 3 deletions src/EPPlus/Style/RichText/ExcelRichTextCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ public ExcelRichText Insert(int index, string text)
rt.FontName = prevRT.FontName;
rt.Charset = prevRT.Charset;
rt.Family = prevRT.Family;
rt.ColorSettings = prevRT.ColorSettings;
rt.ColorSettings = prevRT.ColorSettings.Clone();
rt.PreserveSpace = prevRT.PreserveSpace;
}
else if(_cells == null)
Expand All @@ -197,8 +197,8 @@ public ExcelRichText Insert(int index, string text)
}
if (_isComment == false)
{
_cells._worksheet._flags.SetFlagValue(_cells._fromRow, _cells._toCol, true, CellFlags.RichText);
_cells.SetIsRichTextFlag(true);
_cells._worksheet._flags.SetFlagValue(_cells._fromRow, _cells._fromCol, true, CellFlags.RichText);
//_cells.SetIsRichTextFlag(true);
}
}
_list.Insert(index, rt);
Expand Down
12 changes: 12 additions & 0 deletions src/EPPlus/Style/RichText/ExcelRichTextColor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,5 +68,17 @@ public bool HasAttributes
/// A negative value means not set.
/// </summary>
public int? Indexed { get; set; }

internal ExcelRichTextColor Clone()
{
return new ExcelRichTextColor
{
Rgb = this.Rgb,
Theme = this.Theme,
Tint = this.Tint,
Auto = this.Auto,
Indexed = this.Indexed
};
}
}
}
41 changes: 19 additions & 22 deletions src/EPPlusTest/Core/Worksheet/WorksheetCoreTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Date Author Change
*******************************************************************************/
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml;
using System.Drawing;

namespace EPPlusTest.Core.Worksheet
{
Expand Down Expand Up @@ -89,52 +90,48 @@ public void RichTextFlagShouldBeCleanedWhenOverwritingValue()
var ws = p.Workbook.Worksheets.Add("RichTextOverwriteValue");

ws.Cells["A1:B2"].RichText.Add("RichText");

Assert.IsTrue(ws.Cells["A1"].IsRichText);
ws.Cells["A1"].Value = "Text";
ws.Cells["B2"].Value = "Text";
Assert.IsFalse(ws.Cells["A1"].IsRichText);
Assert.IsTrue(ws.Cells["A2"].IsRichText);
Assert.IsTrue(ws.Cells["B1"].IsRichText);
Assert.IsFalse(ws.Cells["A2"].IsRichText);
Assert.IsFalse(ws.Cells["B1"].IsRichText);
Assert.IsFalse(ws.Cells["B2"].IsRichText);
}
}

[TestMethod]
public void RichTextFlagShouldBeCleanedWhenOverwritingValueAddress()
public void RichTextFlagShouldBeCleanedWhenOverwritingWithArray()
{
using (var p = new ExcelPackage())
{
var ws = p.Workbook.Worksheets.Add("RichTextOverwriteAddress");
var ws = p.Workbook.Worksheets.Add("RichTextOverwrite");

ws.Cells["A1:B2"].RichText.Add("RichText");
ws.Cells["A1:C3"].RichText.Add("RichText");
Assert.IsTrue(ws.Cells["A1"].IsRichText);
Assert.IsTrue(ws.Cells["B2"].IsRichText);
Assert.IsFalse(ws.Cells["B2"].IsRichText);

ws.Cells["A1:B2"].Value = "Text";
ws.Cells["A1:B2"].Value = new string[,] { { "Text", "Text" }, { "Text", "Text" } };
Assert.IsFalse(ws.Cells["A1"].IsRichText);
Assert.IsFalse(ws.Cells["B2"].IsRichText);
}
}

[TestMethod]
public void RichTextFlagShouldBeCleanedWhenOverwritingWithArray()
public void RichTextColorSettingsShouldUseDifferentInstances()
{
using (var p = new ExcelPackage())
{
var ws = p.Workbook.Worksheets.Add("RichTextOverwrite");

ws.Cells["A1:C3"].RichText.Add("RichText");
Assert.IsTrue(ws.Cells["A1"].IsRichText);
Assert.IsTrue(ws.Cells["B2"].IsRichText);

ws.Cells["A1:B2"].Value = new string[,] { { "Text", "Text" }, { "Text", "Text" } };
Assert.IsFalse(ws.Cells["A1"].IsRichText);
Assert.IsFalse(ws.Cells["B2"].IsRichText);
Assert.IsTrue(ws.Cells["C1"].IsRichText);
Assert.IsTrue(ws.Cells["C3"].IsRichText);
Assert.IsTrue(ws.Cells["A3"].IsRichText);
var ws = p.Workbook.Worksheets.Add("Sheet1");

var rt = ws.Cells["A1"].RichText;
var rt1 = rt.Add("No1");
var rt2 = rt.Add("No2");
rt2.Color = Color.Red;
Assert.AreEqual(rt1.Color, Color.Empty);
Assert.AreEqual(rt2.Color, Color.Red);
}
}

[TestMethod]
public void FormulaShouldBeCleanedWhenOverwritingWithArray()
{
Expand Down

0 comments on commit 9dffadd

Please sign in to comment.