Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从docx文件中获取一个单词的样式?_C#_.net_Openxml_Docx - Fatal编程技术网

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

C# 如何从docx文件中获取一个单词的样式?,c#,.net,openxml,docx,C#,.net,Openxml,Docx,我可以获得段落的风格,但我不知道如何获得一个单词的风格 我在分析一篇课文,我要得到所有格式化的单词 示例。 输入: Stack Overflow是一家私人网站,是Stack Exchange网络的旗舰网站,由杰夫·阿特伍德和乔尔·斯波尔斯基于2008年创建。它被创建为比早期问答网站(如专家交流)更开放的替代网站。该网站的名称是通过投票选出的 2008年4月,阿特伍德流行编程博客《编写恐怖代码》的读者 输出: 堆栈溢出,杰夫·阿特伍德,乔尔·斯波尔斯基,专家交换,编码恐怖 其他: 我不会用它来转换

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

我在分析一篇课文,我要得到所有格式化的单词

示例。

输入:

Stack Overflow是一家私人网站,是Stack Exchange网络的旗舰网站,由杰夫·阿特伍德乔尔·斯波尔斯基于2008年创建。它被创建为比早期问答网站(如专家交流)更开放的替代网站。该网站的名称是通过投票选出的 2008年4月,阿特伍德流行编程博客《编写恐怖代码》的读者

输出:

堆栈溢出,杰夫·阿特伍德,乔尔·斯波尔斯基,专家交换,编码恐怖

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

你用什么来获得
段落的风格?
然而,为了检索该信息,您需要解析应用于目标Run元素(包含word的元素)的样式

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

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

此外,您可能还想退房。

我解决了这个问题,因此:
使用Microsoft.Office.Interop.Word;
使用制度;
使用System.Collections.Generic;
使用系统文本;
...
Application wordApp=新应用程序();
对象未命中=System.Reflection.Missing.Value;
对象只读=真;
对象文件名=“…\Test.docx”;
Document doc=wordApp.Documents.Open(ref文件名,ref未命中,ref未命中
只读,…);
List boldList=新列表();
foreach(文档范围中的范围)
foreach(范围为rng.WORD)
如果(rngWord.Bold!=0)
粗体列表.Add(rngWord.Text);
foreach(粗体列表中的变量项)
控制台写入线(项目);
Console.ReadKey();
wordApp.Quit();

您是在寻找html还是docx提取?他们甚至一点都不一样。。。查看Aspose.Words和HTML敏捷包,具体取决于您正在做什么。RandomUs1r,我不打算使用它来转换为HTML。我只需要得到风格,并用它来估计这个词的重要性。如果这个词是粗体的,这意味着这个词更重要。谢谢,它解决了我的问题。但是
GemBox.Document
在免费试用中只能阅读20段。所以我找了更多,找到了这个。我已经用Microsoft.Office.Interop.Word解决了我的问题。
DocumentModel document = DocumentModel.Load("Sample.docx");

foreach (Run run in document.GetChildElements(true, ElementType.Run))
    if (run.CharacterFormat.Bold)
        Console.WriteLine(run.Text);
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();