我在这里使用这个控件 http://www.codeproject.com/Articles/11819/Integrating-Microsoft-Word-in-your-NET-application
这个控件的优点在于,它使用Word Interop,因此我可以使用Word Object Model操作Word文档,包括Application,Document,Selection,Range和Bookmark对象。
我正在尝试搜索文档中的单词;用双引号括起来的所有单词。我只是通过在 Document.Application.ActiveDocument.Content.Text 中取出文本来使用RegEx,并且通过使用这些取词,我的应用程序将在当前文档中查找不匹配的单词匹配在相同的字符情况下,例如在我的集合中,我有“业务名称”,应用程序将在文档中查找可能的匹配项,例如:业务名称,业务名称,使用RegEx的业务名称。我需要RegEx,因为我需要获取单词的索引,所以当用户点击显示可能匹配的列表时,它将使用
自动突出显示在文档中document.Application.Selection.SetRange(index, index);
document.Application.Selection.Find.ClearFormatting();
document.Application.Selection.Find.Execute(s_word, MatchCase: true);
这里的问题是,有时单词没有突出显示,因为SetRange位于错误的索引位置,因为我使用RegEx来获取Match.Index
我的问题是,有没有其他方法可以找到我可以拥有索引的可能匹配,所以当用户点击列表中的这个词时,它会突出显示这个词而没有任何问题?
答案 0 :(得分:0)
不,我不知道。
拥有表格,图像和其他特殊对象时,Word中的字符索引会自动生效。对于one of our projects,我们遇到了同样的问题。我们发现没有可靠的方法将纯文本中的字符位置与Word中的索引相匹配。
这就是我们恢复OpenXML格式以便以可靠的方式获取文本的原因,但这需要大量的额外工作才能实现。
如果您有大致的位置,可以尝试使用Find
。只需从calculated position - 10
开始搜索以找到文本,最有可能您就会找到确切的位置,然后您可以用它来突出显示。