使用OpenXML更改段落中的彩色文本

本文关键字:彩色 文本 段落中 OpenXML 使用 | 更新日期: 2023-09-27 18:21:19

我有一个Word文档lorem.docx,内容如下:

Lorem Ipsum只是印刷和排版的伪文本工业

[蓝色]

Lorem Ipsum自15世纪,一个不知名的印刷商拿走了一个打字的厨房并对其进行了搅乱制作一本样板书。

[/BLUE]

它不仅存活了五个世纪,而且跨越了电子排版,基本保持不变。

我需要在[蓝色]和[/蓝色]之间更改特定降落伞的颜色。我有这个代码:

string path = @"C:'Users'Kenneth'Desktop'lorem.docx";
using (WordprocessingDocument document = WordprocessingDocument.Open(path, true))
{
     DocumentFormat.OpenXml.Wordprocessing.Document doc = document.MainDocumentPart.Document;
     // Get and set the style properties of each content control
     foreach (var itm in elements)
     {
         try
         {
             List<Text> textparts = document.MainDocumentPart.Document.Body.Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>().ToList();
             // CHANGE COLOR:
             foreach (RunProperties rp in list_runProperties)
             {
                 rp.Color = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "cc0000" };
             }
          }
      }
}

但它改变了整个文档的颜色。我需要在蓝色标签之间更改文本的颜色。

我该怎么做?

使用OpenXML更改段落中的彩色文本

看起来您的代码只是在迭代所有RunProperties,这就是它们都在变化的原因。

OpenXML文档的基本结构是:

<Document>
    <Body>
        <Paragraph>
            <Run>
                <RunProperty>
                   <Text>

其中RunProperty将是Run的子级。您需要遍历每个元素,查找包含您要查找的内容的文本(示例中为"[BLUE]"),并仅将更改应用于其父Run。

这可能有点棘手,因为Word不一定会将文本放置在单个text元素中,并且可能会将其拆分为多个元素,但由于这是一种更简单的情况,您可能只需要像当前一样查找text子体,将其InnerText与"[BLUE]"进行比较,然后更改该子体的RunProperty。你可能还需要在下面的Run中将其重置为黑色,因为我不确定它是否会这样做。