如何逐字处理MS Word 2010文档

时间:2016-01-21 11:31:58

标签: c# ms-word office-interop

我想开发一个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()始终返回第一个单词。如果我删除行word.Text = MyCorrecter(word.Text);,代码会成功迭代所有单词。有查找/替换示例,但对于这种特殊情况,这些并不是非常有效。

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

1 个答案:

答案 0 :(得分:1)

对于这种情况 - 您实际上正在更改目标范围(“单词”)的内容,您需要使用带有索引“计数”的循环。例如:

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;

我强烈建议您不要在代码中使用“选择”或“选择”,除非您需要做的事情不能以其他方式完成。直接分配给Range.Text对象。

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