【问题标题】:Find multiple string & Highlight those string in a MS-Word Document查找多个字符串并在 MS-Word 文档中突出显示这些字符串
【发布时间】:2013-02-19 13:33:13
【问题描述】:

假设我必须在 MS-Word 文档中搜索多个字符串。我想将多个关键字传递给 word api,并且我需要该 api 将通过 MS-word 打开该 doc 或 docx 文件,如果在我提供的 ms-word 文件中找到这些词,则突出显示这些词。在这里,我得到了一个用于在 ms-word 文件中突出显示单词的示例代码,但我发现的例程可能不会突出显示多个单词。另一个问题我注意到,当它突出显示文件并打开时,它工作正常,但是当我关闭 ms-word 时,它要求保存更改。我了解此例程会修改文档以制作我不想要的突出显示。我希望该例程会突出显示但不会修改 doc 文件....有什么办法可以做到这一点。请指导。谢谢

using Word = Microsoft.Office.Interop.Word;

private void btnFind_Click(object sender, EventArgs e)
{
object fileName = "audi.doc"; //The filepath goes here
string textToFind = "test1,test2,test3"; //The text to find goes here
Word.Application word = new Word.Application();
Word.Document doc = new Word.Document();
object missing = System.Type.Missing;
try
{
    doc = word.Documents.Open(ref fileName, ref missing, ref missing, 
    ref missing, ref missing, ref missing, ref missing, ref missing, 
    ref missing, ref missing, ref missing, ref missing, ref missing, 
    ref missing, ref missing, ref missing);
    doc.Activate();
    foreach (Word.Range docRange in doc.Words)
    {
        if(docRange.Text.Trim().Equals(textToFind,
           StringComparison.CurrentCultureIgnoreCase))
        {
            docRange.HighlightColorIndex = 
              Microsoft.Office.Interop.Word.WdColorIndex.wdDarkYellow;
            docRange.Font.ColorIndex = 
              Microsoft.Office.Interop.Word.WdColorIndex.wdWhite;
        }
    }
    System.Diagnostics.Process.Start(fileName.ToString());

}
catch (Exception ex)
{
    MessageBox.Show("Error : " + ex.Message);
}
}

【问题讨论】:

    标签: c# ms-word highlight


    【解决方案1】:

    您可以使用Range.Find Property

    下面的代码以只读方式打开文档,并在不更改文档的情况下选择要查找的单词的所有匹配项。

    这里有一些代码:

     private static void HighlightText()
        {
            object fileName = "C:\\1.doc";
            object textToFind = "test1";
            object readOnly = true;
            Word.Application word = new Word.Application();
            Word.Document doc = new Word.Document();
            object missing = Type.Missing;
            try
            {
                doc = word.Documents.Open(ref fileName, ref missing, ref readOnly,
                                          ref missing, ref missing, ref missing,
                                          ref missing, ref missing, ref missing, 
                                          ref missing, ref missing, ref missing, 
                                          ref missing, ref missing, ref missing, 
                                          ref missing);
                doc.Activate();
    
    
                object matchPhrase = false;
                object matchCase = false;
                object matchPrefix = false;
                object matchSuffix = false;
                object matchWholeWord = false;
                object matchWildcards = false;
                object matchSoundsLike = false;
                object matchAllWordForms = false;
                object matchByte = false;
                object ignoreSpace = false;
                object ignorePunct = false;
    
                object highlightedColor = Word.WdColor.wdColorGreen;
                object textColor = Word.WdColor.wdColorLightOrange;
    
                Word.Range range = doc.Range();
    
                bool highlighted = range.Find.HitHighlight(textToFind,
                                                           highlightedColor,
                                                           textColor,
                                                           matchCase,
                                                           matchWholeWord,
                                                           matchPrefix,
                                                           matchSuffix,
                                                           matchPhrase,
                                                           matchWildcards,
                                                           matchSoundsLike,
                                                           matchAllWordForms,
                                                           matchByte,
                                                           false,
                                                           false,
                                                           false,
                                                           false,
                                                           false,
                                                           ignoreSpace,
                                                           ignorePunct,
                                                           false);
    
                System.Diagnostics.Process.Start(fileName.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : " + ex.Message);
                Console.ReadKey(true);
            }
        }
    

    【讨论】:

    • 谢谢...您的代码看起来很有希望。我没有测试过这段代码。所以只要告诉我这段代码将突出显示我将提供什么来找出答案?此代码将以只读模式打开 word doc 吗?如果是,请告诉我用户是否在突出显示并打开此文件后尝试编辑 word 文件,然后用户可以编辑 doc 文件。请指导我。谢谢
    • Tomas,此代码将突出显示文件中包含的所有单词。如果您只想突出显示第一个包含,请更改 range.Find.HitHighlight() 函数的参数。是的,代码以只读模式打开文档,用户可以编辑文档。
    • 我在运行您的代码时遇到错误。 range.find.highlight() 函数发生错误,错误消息是“错误的变量类型。(来自 HRESULT 的异常:0x80020008(DISP_E_BADVARTYPE))”所以请查看您的代码并告诉我我需要更改什么来修复错误。谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 2019-04-29
    • 1970-01-01
    • 2013-07-15
    • 2021-09-12
    • 1970-01-01
    • 2015-01-30
    • 2015-08-25
    相关资源
    最近更新 更多