如何逐字操作 MS Word 2010 文档

How to manipulate MS Word 2010 document word by word

我想开发一个 MS Word 2010 加载项(也是 2013/2016),它像土耳其语文本的拼写检查器(恢复重音字符)一样工作。我想为用户提供 3 个选项(通过上下文菜单)以使用该工具。

对于第一个选项,我尝试遍历所有单词并通过以下代码逐个修复它们:

var words = App.ActiveDocument.Words;

foreach (Range word in words)
{
    var corr = MyCorrecter(word.Text);
    word.Select();
    App.Selection.TypeText(corr);
}

然而,这陷入了无限循环。 word.Next() 总是 returns 第一个词。如果我删除行 word.Text = MyCorrecter(word.Text);,代码会成功地迭代所有单词。周围有 find/replace 个示例,但这些示例对于这种特殊情况不是很有效。

简而言之,在 Word 文档中一个一个地操作单词的最有效方法是什么?

对于这种情况——您实际上是在更改目标范围 ("word") 的内容,您需要使用一个 "counts" 带有索引的循环。例如:

Word.Words words = app.ActiveDocument.Words;
int iWordCount = words.Count;
Word.Range rngWord = null;
for (int i = 1; i<= iWordCount; i++) 
{
  rngWord = words[i]
  var corr = MyCorrecter(rngWord.Text);
  rngWord.Text = corr;
 }
//When you're done, dont' forget to release the COM objects
rngWord = null;
words = null;

我强烈建议您不要在您的代码中使用 Select 或 Selection,除非您需要做的事情无法以任何其他方式完成。直接分配给 Range.Text 对象。

请注意,在 Word 中的某些情况下,它有助于 运行 向后循环遍历文档(从最高计数器到最低计数器)。不过,我认为这种情况会继续下去。