EPPLUS正在重复插入字符串

时间:2017-07-17 08:22:04

标签: c# excel epplus

我正在尝试将文本插入到RichText中,当插入的字符串的索引位于元素的末尾时,下一个元素将被复制!

以下是一个例子:

worksheet.Cells[rownum + 100, column].RichText.Add("first ");
worksheet.Cells[rownum + 100, column].RichText.Add(" second");
worksheet.Cells[rownum + 100, column].RichText.Text = worksheet.Cells[rownum + 100, column].RichText.Text.Insert(6, "Inserted");

结果:“first Insertedsecondsecond”

这是正常行为吗?因为我期待得到:

“首先插入第二个”

1 个答案:

答案 0 :(得分:2)

我创建了这个来模拟你的问题。

static void Main(string[] args)
{
    using (OfficeOpenXml.ExcelPackage ep = new OfficeOpenXml.ExcelPackage())
    {
        var ws = ep.Workbook.Worksheets.Add("sheet 1");
        ws.Cells[1, 1].IsRichText = true;
        ws.Cells[1, 1].RichText.Add("first ");
        ws.Cells[1, 1].RichText.Add(" second");
        ws.Cells[1, 1].RichText.Text = ws.Cells[1, 1].RichText.Text.Insert(6, "Inserted");

        Console.WriteLine(ws.Cells[1, 1].Text); // shows your bug
    }
}

这会在ws.Cells[1, 1].RichText

上提供一个包含2个项目的数组

第一个给出您想要的值。 enter image description here

这不能解决它......

ws.Cells[1, 1].RichText.Add("first ");
ws.Cells[1, 1].RichText.Add(" second");
ws.Cells[1, 1].RichText.Text = ws.Cells[1, 1].RichText.Text.Insert(6, "Inserted");
ws.Cells[1, 1].RichText.RemoveAt(ws.Cells[1, 1].RichText.Count - 1);
Console.WriteLine(ws.Cells[1, 1].Text); 

问题在于richtextcollection有第二项。不应该在那里。

ws.Cells[1, 1].RichText.Remove(ws.Cells[1, 1].RichText.Last());

甚至抛出异常!

我能想到的唯一解决方案是首先清除RichTextCollection数组。

string curText = ws.Cells[1, 1].RichText.Text;
ws.Cells[1, 1].RichText.Clear(); // remove previous nodes
ws.Cells[1, 1].RichText.Text = curText.Insert(6, "Inserted");

完整的示例代码:

static void Main(string[] args)
{
    using (OfficeOpenXml.ExcelPackage ep = new OfficeOpenXml.ExcelPackage())
    {
        var ws = ep.Workbook.Worksheets.Add("sheet 1");
        ws.Cells[1, 1].IsRichText = true;
        ws.Cells[1, 1].RichText.Add("first ");
        ws.Cells[1, 1].RichText.Add(" second");
        ws.Cells[1, 1].RichText.Add(" third");
        string curText = ws.Cells[1, 1].RichText.Text;
        ws.Cells[1, 1].RichText.Clear();
        ws.Cells[1, 1].RichText.Text = curText.Insert(6, "Inserted");

        Console.WriteLine(ws.Cells[1, 1].Text);
    }
}