如何从docx文件中获取一个单词的样式?

时间:2017-10-12 21:44:07

标签: c# .net openxml docx

我可以获得段落的风格,但我不知道如何获得一个词的样式。

我正在分析文字而我要获取所有格式化的文字。

示例

输入:

  

Stack Overflow 是一个私营网站,是Stack Exchange Network的旗舰网站,由 Jeff Atwood Joel Spolsky 于2008年创建。它被创建为比较早期的问答网站更加开放的替代方案,例如专家交流。该网站的名称是通过投票选出的   2008年4月读者 Coding Horror ,Atwood的热门节目博客

输出:

  

Stack Overflow,Jeff Atwood,Joel Spolsky,专家交流,编码恐怖。

其他: 我不打算用它来转换为HTML。我只需要获得风格并用它来估计这个词的重要性。如果单词是粗体,这意味着这个单词更重要。

2 个答案:

答案 0 :(得分:1)

您使用什么来获得Paragraph的风格?
然而,为了检索该信息,您需要解决应用于目标Run元素(包含您的单词的元素)的样式。

如果直接在Run元素(作为其子RunProperties元素)上定义样式,这可能很简单,但如果它不是,那么您需要通过检查应用的样式,基于样式的样式等来解决样式。简而言之,这是一个有点复杂的主题,对于我建议阅读this的基本介绍。

一个简单直接的解决方案是使用可以为您解析样式的库,例如GemBox.Document

DocumentModel document = DocumentModel.Load("Sample.docx");

foreach (Run run in document.GetChildElements(true, ElementType.Run))
    if (run.CharacterFormat.Bold)
        Console.WriteLine(run.Text);

此外,您可能还想查看this reading example

答案 1 :(得分:0)

我解决了这个问题:

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.Text;
...
Application wordApp = new Application();
object miss = System.Reflection.Missing.Value;
object readOnly = true;
object filename = "...\Test.docx";
Document doc = wordApp.Documents.Open(ref filename, ref miss, ref 
readOnly,...);

List<string> boldList = new List<string>();

foreach (Range rng in doc.StoryRanges)
     foreach (Range rngWord in rng.Words)
         if (rngWord.Bold != 0)
             boldList.Add(rngWord.Text);             

     foreach (var item in boldList)
         Console.WriteLine(item);

     Console.ReadKey();
     wordApp.Quit();