C# 如何逐字操作MS Word 2010文档

C# 如何逐字操作MS Word 2010文档,c#,ms-word,office-interop,C#,Ms Word,Office Interop,我想开发一个MS Word 2010插件(2013/2016),它的工作原理类似于土耳其文本的拼写检查器(恢复重音字符)。我想给用户3个选项(通过上下文菜单)来使用该工具 修复文档中的所有文本。(包括表格和列表中的内容等) 修复选定区域中的所有文本 将单词固定在光标位置 对于第一个选项,我尝试迭代所有单词,并通过以下代码逐个修复它们: var words = App.ActiveDocument.Words; foreach (Range word in words) { var

我想开发一个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=mycorrecert(word.Text),代码成功迭代所有单词。到处都有查找/替换示例,但对于这种特殊情况,这些示例并不十分有效


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

对于这种情况,如果您实际更改目标范围(“Word”)的内容,则需要使用一个循环,该循环使用索引“计数”。例如:

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;
Word.Words=app.ActiveDocument.Words;
int-iWordCount=words.Count;
Word.Range rngWord=null;

对于(int i=1;i@stuartd上面的代码,除了
word.Text=MyCorrecter(word.Text);
行之外,也会循环遍历每个单词。但是当我设置一个单词的文本时,它不起作用。什么类型的“不起作用”-文本没有改变,有错误,或者..@stuartd我编辑了问题。请重新阅读代码下面的段落。“我强烈建议您不要在代码中使用Select或Selection,除非您需要执行的操作无法通过其他方式完成。请直接指定给Range.Text对象。“可以详细说明吗?选择的执行速度往往较慢。它不太可靠-用户可能会单击文档/它可能不在您认为的位置。稍后或其他人不清楚代码在做什么以及在哪里。您在Word.Application中只能有一个选择,但可以有多个范围。”。