【问题标题】:Not able to Highlight a word inside word file using OpenXML无法使用 OpenXML 突出显示 word 文件中的单词
【发布时间】:2015-11-17 06:07:37
【问题描述】:

我正在使用 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
    }
}

【问题讨论】:

  • 您能告诉我们代码有什么问题吗?您已经编写了它...您能否逐步检查代码并查明问题所在?

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


【解决方案1】:

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

FWIW 任何类型的格式都是 RunProperties 的子元素,因此无法将颜色直接附加到 Run。此外,您需要为这种格式创建一个对象(从您的描述中不清楚您是要更改文本颜色还是应用突出显示格式)。这就是附加到 RunProperties 的内容。同样重要的是,您的代码首先检查 RunProperties 是否可用于 Run。如果没有,则需要先创建它,然后才能将任何内容附加到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多