2

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

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

[蓝色的]

自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作一本类型样本书。

[/蓝色的]

它不仅经历了五个世纪,而且经历了电子排版的飞跃,基本保持不变。

我需要在 [BLUE] 和 [/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" };
             }
          }
      }
}

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

我怎样才能做到这一点?

4

1 回答 1

0

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

OpenXML 文档的基本结构是:

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

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

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

于 2014-07-16T07:03:21.630 回答