在我的Word插件中,我有一个来自Document.Words集合的Range副本列表,如下所示:
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);
}
现在我创建一个包含“好的好东西”的文档。将列表中的第一项分配给“hello”后,第二项也会更改。该消息显示一个列表,其中包含“Hello”,“hello good”(???),“good”。那我的代码出了什么问题?
答案 0 :(得分: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对象的情况下操作字符串。