2017-07-17 10 views
0

挿入された文字列のインデックスが次の要素が重複したときにリッチテキストにテキストを挿入しようとしています!ここでEPPLUSが挿入時に文字列を複製しています

は一例です:

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

結果: "最初のInsertedsecondsecond"

はこの正常な動作ですか?私が得ることを期待していますので:

は、「第一、第二挿入」

+0

あなたはセルの '.Text'プロパティに'挿入() 'バックの戻り値を代入する必要がありますか? Insert()を単独で呼び出すことはできませんでしたか? (申し訳ありませんが、eeplusに精通していません)。それは何を返すのですか? – DGibbs

+0

はい、文字列自体には影響しません。更新された文字列を返します。 –

+0

'worksheet.Cells [rownum + 100、column] .RichText.Text = worksheet.Cells [rownum + 100、column] .RichText.Text.Insert(6、" Inserted ");'ちょうどのワークシートに変更するもの。セル[rownum + 100、column] .RichText.Text.Insert(6、 "Inserted"); 'do? – Dumisani

答えて

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

問題は、2番目の項目を持つ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); 
    } 
} 
+0

質問を更新しました。 Insertはテキストを更新せず、代わりに更新されたテキストを返します。 –

関連する問題