diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
index 7bc89fe..059f02a 100644
--- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
@@ -162,6 +162,8 @@
+
+
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/IXLRichString.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/IXLRichString.cs
new file mode 100644
index 0000000..7425c22
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/IXLRichString.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ClosedXML.Excel.RichText
+{
+ public interface IXLRichString
+ {
+ IXLRichText AddText(String text);
+ IXLRichString Clear();
+ IXLRichText Characters(Int32 index, Int32 length);
+ }
+}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichString.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichString.cs
new file mode 100644
index 0000000..dc4f987
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichString.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ClosedXML.Excel.RichText
+{
+ internal class XLRichString: IXLRichString
+ {
+ List richTexts = new List();
+ public IXLRichText AddText(String text)
+ {
+ var richText = new XLRichText(text);
+ richTexts.Add(richText);
+ return richText;
+ }
+ public IXLRichString Clear()
+ {
+ richTexts.Clear();
+ return this;
+ }
+
+ public override string ToString()
+ {
+ var sb = new StringBuilder(richTexts.Count);
+ richTexts.ForEach(rt => sb.Append(rt.Text));
+ return sb.ToString();
+ }
+
+ public IXLRichText Characters(Int32 index, Int32 length)
+ {
+ List newRichTexts = new List();
+ Int32 runningLength = 0;
+ foreach (var rt in richTexts)
+ {
+ if (runningLength + rt.Text.Length > index + 1)
+ {
+ Int32 startIndex = index - runningLength + 1;
+ if (startIndex > 0)
+ {
+ var newRT = new XLRichText(rt.Text.Substring(0, startIndex + 1), rt);
+ newRichTexts.Add(newRT);
+ }
+ }
+ else
+ {
+ newRichTexts.Add(rt);
+ runningLength += rt.Text.Length;
+ }
+ }
+ richTexts = newRichTexts;
+ }
+ }
+}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs
index 700ca98..8e93ec2 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/RichText/XLRichText.cs
@@ -9,6 +9,10 @@
{
public XLRichText(String text)
{
+ }
+
+ public XLRichText(String text, IXLRichText defaultRichText)
+ {
Text = text;
var defaultFont = XLWorkbook.DefaultStyle.Font;