>

삽입 된 문자열의 색인이 요소의 끝에있을 때 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

    문제를 시뮬레이션하기 위해 이것을 만들었습니다.

    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 개의 항목으로 구성된 배열을 제공합니다

    여기서 첫 번째 값은 원하는 값을 제공합니다.

    이 문제는 해결되지 않습니다 ...

    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);
        }
    }
    
    

  • 이전 sql - PARSENAME 함수가 이상하게 동작 함
  • 다음 php - 선택 태그로 날짜 표시 제한 Wordpress