C#Word Interop – 使用某种语言进行拼写检查

对于我的客户,我需要强制使用某种语言进行拼写检查。

我已经探索了MSDN文档,发现当在活动文档中调用CheckSpelling()方法时,它将调用拼写检查。 此方法具有自定义词典的参数。

我的问题是我找不到关于这些词典或如何使用它们的任何内容。

此外,仍然有可能有另一种方法来做到这一点。

任何人都可以在正确的方向上推动我吗?

找到了解决方案:

 foreach (Range range in activeDocument.Words) { range.LanguageID = WdLanguageID.wdFrenchLuxembourg; } 

评论后编辑

由于我的activedocument是一个变量,我似乎失去了静态Range属性。 我通过以下方式找到了一份工作。 (lan是我的变量,我保留了我的WdLanguageId)

 object start = activeDocument.Content.Start; object end = activeDocument.Content.End; activeDocument.Range(ref start, ref end).LanguageID = lan; 

感谢@Adrianno的所有帮助!

拼写检查器使用文本语言来选择规则和词典(查看此处以查看其工作原理)。

您必须将文本语言设置为您需要的语言,然后SC将使用该语言。 请点击此链接了解更多详情:

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.language.aspx

我最近一直在研究这个问题,并且认为我会在已经给出的答案中添加一些内容。

要获取某种语言的文档中的拼写错误列表,请执行以下操作:

 // Set the proofing language myDocument.Content.LanguageID = WdLanguageID.wdDanish; // Get the spelling errors (returns a ProofreadingErrors collection) var errors = myDocument.SpellingErrors; // There is no "ProofreadingError" object -> errors are accessed as Ranges foreach (Range proofreadingError in errors) Console.WriteLine(proofreadingError.Text); 

正如Adriano所指出的,关键是首先指定文档内容的语言,然后您可以访问给定语言的拼写错误。 我测试了这个(Word Interop API版本15,Office 2013),它的工作原理。

如果你想获得每个拼写错误的单词的建议,我建议你看看我之前对这个问题的回答: https : //stackoverflow.com/a/14202099/700926

在那个答案中,我提供了示例代码以及相关文档的链接,以了解如何完成。 特别是,该示例介绍了如何使用Word Interop以某种语言(您选择的)对给定单词进行拼写检查。 该示例还介绍了如何访问Word返回的建议。

最后,我有几点注意事项:

  • 与当前接受的答案(您自己的答案)相比 – 这种方法要快得多,因为它不必遍历每个单词。 我一直在使用Word Interop报告(100多页)并相信我,你不想坐等等迭代完成。
  • 有关SpellingErrors属性的信息可以在这里找到。
  • 有关不存在ProofreadingError对象的信息可以在这里找到。

访问Office对象时,切勿使用foreach语句。 大多数Office对象都是COM对象,使用foreach会导致内存泄漏。

以下是一段工作代码

  Microsoft.Office.Interop.Word.ProofreadingErrors errorCollection = null; try { errorCollection = Globals.ThisAddIn.Application.ActiveDocument.SpellingErrors; // Indexes start at 1 in Office objects for (int i = 1; i <= errorCollection .Count; i++) { int start = errorCollection[i].Start; int end = errorCollection[i].End; } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { // Release the COM objects here // as finally shall be always called if (errorCollection != null) { Marshal.ReleaseComObject(errorCollection); errorCollection = null; } }