无法使用OpenXML突出显示word文件中的单词

时间:2015-11-16 19:09:11

标签: c# ms-word openxml openxml-sdk

我正在使用Open XML SDK来突出显示docx文件中的特定单词,但我无法做到这一点,经过广泛的研究后,我做了以下尝试打开文档,然后编辑单词的颜色并保存它再一次,但是当我发现文件的最后编辑时间与现在的日期时,我没有得到任何保存。

该代码有什么问题?

void HighLightWord(string documentUrl, string word)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(documentUrl, true))
    {
        var body = wordDoc.MainDocumentPart.Document.Body;
        var paras = body.Elements<Paragraph>();
        DocumentFormat.OpenXml.Wordprocessing.Color color = new DocumentFormat.OpenXml.Wordprocessing.Color();

        foreach (var para in paras)
        {
            foreach (var run in para.Elements<Run>())
            {
                foreach (var text in run.Elements<Text>())
                {
                    if (text.Text.Contains(word))
                    {
                        color.Val = "365F91";
                        run.Append(color);
                        wordDoc.MainDocumentPart.Document.Save();
                        return;
                    }
                }
            }
        }
        wordDoc.Close(); // close the template file
    }
}

1 个答案:

答案 0 :(得分:1)

使用您需要的格式在Word应用程序中创建一个简单文档。保存并关闭。在Open XML SDK Productivity Tool中打开文档。这将生成创建文档所需的代码。然后,您可以将代码与工具的代码进行比较。

FWIW任何类型的格式都是RunProperties的子元素,因此直接将颜色附加到Run无法正常工作。此外,您需要为格式化创建一个对象(从您的描述中不清楚您是否要更改文本颜色或应用高亮格式)。这就是附加到RunProperties的内容。您的代码首先检查RunProperties是否可用于Run,这一点也很重要。如果没有,首先需要创建,然后才能附加任何内容。