2

私のWordアドインには、以下のようなDocument.Wordsコレクションからの範囲コピーのリストがあります。

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Document doc = Globals.ThisAddIn.Application.ActiveDocument;
    List<Range> list = new List<Range>();
    foreach (Range word in doc.Words)
    { 
        list.Add(word);
    }
    MessageBox.Show("list: " + list[0].Text + "|"+ list[1].Text + "|"+ list[2].Text + "|"+      list[3].Text + "|"+ list[4].Text);

    list[0].Text = "Hello ";
    MessageBox.Show("list: " + list[0].Text + "|"+ list[1].Text + "|"+ list[2].Text + "|"+ list[3].Text + "|"+ list[4].Text);
}

次に、「goodgoodgood」を含むドキュメントを作成します。リストの最初のアイテムを「hello」に割り当てた後、2番目のアイテムも変更されます。メッセージには、「Hello」、「hello good」(???)、「good」のリストが表示されます。では、私のコードの何が問題になっていますか?

4

1 に答える 1

1

Range への参照ではなく、その値 (テキスト) をリストに追加してみてください。

var list = new List<string>();
foreach (Range range in doc.Words)
{ 
    list.Add(range.Text);
}

またはすぐに:

var list = new List<string>(doc.Words.Cast<Range>().Select(r => r.Text));

そのため、VSTO オブジェクトを参照せずに文字列を操作できるようになりました。

于 2012-12-03T02:49:26.517 に答える