将 html 标记转换为 ClosedXml RichText

Convert html tag to ClosedXml RichText

我正在使用 ClosedXml 在 Excel 文件中导出一些数据。

我想将包含一些 html 标签的字符串导出为 <font color='gray'><s>....</s></font> 将其翻译成 RichText 颜色灰色并添加删除线。

执行此操作的代码如下:

cell.RichText.Substring(index, length).SetFontColor(XLColor.Gray).SetStrikethrough();

或者我也可以使用:

cell.RichText.AddText("foo")

问题是我还需要删除 html 标签。

我的代码:

string pattern = @"<font color='gray'><s>(\d+)<\/s><\/font>";

foreach (IXLCell cell in ws.Columns("A").CellsUsed())
{
    MatchCollection matches = Regex.Matches(cell.GetValue<string>(), pattern);
    foreach (Match match in matches)
    {
        foreach (Capture capture in match.Captures)
        {
              cell.RichText.Substring(capture.Index, capture.Length).SetFontColor(XLColor.Gray).SetStrikethrough();
              // only content in hmtl tags
              // cell.RichText.Substring(capture.Index + "<font color='gray'><s>".Length, capture.Length - "</s></font>".Length - "<font color='gray'><s>".Length).SetFontColor(XLColor.Gray).SetStrikethrough();
        }
     }
}

它有效,但它保留了 html 标签(带灰色)。

我是这样解决的:

foreach (IXLCell cell in ws.Columns("A").CellsUsed())
{
    List<Capture> captures = new List<Capture>();
    MatchCollection matches = Regex.Matches(cell.GetValue<string>(), pattern);
    foreach (Match match in matches)
    {
        foreach (Capture capture in match.Captures)
        {
            captures.Add(capture);
        }
    }

    cell.Value = cell.GetValue<string>().Replace("<font color='gray'><s>", "").Replace("</s></font>", "");
    int contatore = 0;
    foreach (Capture capture in captures)
    {
        cell.RichText.Substring(capture.Index - contatore, capture.Length - "</s></font>".Length - "<font color='gray'><s>".Length).SetFontColor(XLColor.Gray).SetStrikethrough();
        contatore += "<font color='gray'><s></s></font>".Length;
    }
}