を私はあなたの問題をシミュレートするために、これを作成しました。
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);
問題は、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);
}
}
あなたはセルの '.Text'プロパティに'挿入() 'バックの戻り値を代入する必要がありますか? Insert()を単独で呼び出すことはできませんでしたか? (申し訳ありませんが、eeplusに精通していません)。それは何を返すのですか? – DGibbs
はい、文字列自体には影響しません。更新された文字列を返します。 –
'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