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

时间:2013-07-08 00:17:41

标签: c# text colors ms-word openxml

我有一个包含以下内容的Word文档lorem.docx

  

Lorem Ipsum只是打印和排版的虚拟文本   行业。

     

[蓝色]

     

Lorem Ipsum自此以来一直是业界标准的虚拟文本   16世纪,当一个未知的打印机拿出一个类型的厨房并乱扰它   制作一本样本书。

     

[/ BLUE]

     

它不仅存活了五个世纪,而且还在飞跃中幸存下来   电子排版,基本保持不变。

我需要更改[BLUE]和[/ BLUE]之间特定paragrah的颜色。我有这段代码:

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" };
             }
          }
      }
}

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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

看起来您的代码只是遍历所有RunProperties,这就是他们所有变化的原因。

OpenXML文档的基本结构是:

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

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

这可能有点棘手,因为Word不一定会将文本放在单个Text元素中,并且可能会将其拆分为多个但是因为这是一个更简单的情况,您可以只查找当前的Text后代,比较它的内心文字带有&#34; [蓝色]&#34;并更改该RunProperty。您可能还需要在以下运行时将其重置为黑色,因为我不确定是否会这样做。