MS Word自动化:无法启用红色下划线进行拼写检查。

5

我的代码需要启用MS Word 2010中的拼写检查功能,以便用户可以在拼写错误下看到红色下划线。

在当前版本中,我尝试这样做来启用拼写检查:

wordApplication.Options.CheckSpellingAsYouType = true;
wordApplication.Options.SuggestSpellingCorrections = true;
wordApplication.ActiveDocument.ShowSpellingErrors = true;
wordApplication.ActiveDocument.CheckSpelling();

我打开Word并输入“测试文本字符串”。之后,我运行代码,但没有任何反应:没有下划线 我看��到“文本”下面有任何下划线。如果我进入选项,我会发现“拼写检查”选项已启用:进入图像描述 现在,如果我勾选此属性:
wordApplication.ActiveDocument.SpellingErrors[0].Text

这段文本包含了“texxt”,这意味着拼写实际上已经被检查过。

如果我简单地重新启动MS Word并输入相同的文本,红色下划线就会变得可见: enter image description here

我还尝试调用Application.ScreenRefresh和设置ScreenUpdating属性,但没有产生任何效果。

注意:我在文档中没有文本时就运行此代码/宏。如果有一些文本存在,则它可以正常工作。

注意2:重现步骤如下:

  1. Start MS Word. Go to options and disable "check spelling as you type". Restart Word.

  2. Start Word and run following macro:

    Options.CheckSpellingAsYouType = true
    Options.SuggestSpellingCorrections = true
    ActiveDocument.ShowSpellingErrors = true
    
  3. Type in following text: "Test texxt string.". Press Enter.

  4. Run following macro

    MsgBox ActiveDocument.SpellingErrors(1).Text

您会在消息框中看到“texxt”,但不会看到红色下划线。

这是VBA吗?VBA在行末不使用分号,最后一行也不包括括号。当我进行这些更改并运行这些代码行时,texxt被下划线标记,并弹出一个拼写对话框询问是否更改它。当您运行代码时,没有出现错误吗? - Christina
我不想把这个作为答案发布,因为我无法真正重现你所遇到的问题。但是,我发现在运行你的宏之后,Word仍然会自动更正简单的错误。我添加了以下代码: Application.AutoCorrect.ReplaceTextFromSpellingChecker = False 这导致出现了红线。 - Christina
@Christina,使用AutoCorrect.ReplaceTextFromSpellingChecker操作并没有帮助我。 - Oleg
@JamesSnell,当然我添加了一些文本到文档中,但是我无论如何都看不到红色下划线(但是如果我使用Application.ActiveDocument.SpellingErrors数组,我可以看到拼写检查已经完成)。 - Oleg
已经找到解决方案了。谢谢你的帮助! - Oleg
显示剩余3条评论
2个回答

3
意外地发现了以下解决方案:如果在用户输入某些文本后,我调用以下代码,则会显示下划线:
int iDummy = wordDocument.wordApp.ActiveDocument.SpellingErrors.Count;

这个解决方案的问题在于每次添加新文本后都需要执行此代码。 - Oleg

1
由于我的声望不够,我不能在Oleg的回答中留下评论,但值得注意的是,在Word 2013中,使用Application.ActiveDocument.SpellingErrors.Count方法似乎因某些难以理解的原因而删除了当前选择,这可能会带来问题。一个解决办法是通过仅在未选择文本时检查计数来隐藏此效果,例如:
// "document" is a Microsoft.Office.Tools.Word.Document
var selected = document.Application.Selection.Range;
if(Math.Abs(selected.End - selected.Start) == 0)
{
    var count = document.Application.ActiveDocument.SpellingErrors.Count;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接