【问题标题】:Extract bullets from word document using aspose.words in C#在 C# 中使用 aspose.words 从 word 文档中提取项目符号
【发布时间】:2020-12-30 13:15:34
【问题描述】:

我需要从 C# 中的 word 文档中提取带有项目符号样式的文本。我正在使用 aspose.words 库,但也欢迎使用不同库的解决方案。我已经可以上传文档并使用 header1 样式提取文本。但是当我尝试对项目符号样式进行相同操作时,我什么也得不到。

我正在使用下面的代码来获取带有 Heading1 样式的文本,并且可以正常工作。

var heading1 = doc
    .GetChildNodes(NodeType.Paragraph, true)
    .Cast<Aspose.Words.Paragraph>()
    .ToArray()
    .Where(p => p.ParagraphFormat.StyleIdentifier == StyleIdentifier.Heading1);
    
foreach (var head1 in heading1)
{
    listBox11.Items.Add(head1.gettext()tostring());
}

我正在尝试使用下面的代码来获取带有项目符号样式的文本,但这不起作用。

var bullets = doc
    .GetChildNodes(NodeType.Paragraph, true)
    .Cast<Aspose.Words.Paragraph>()
    .ToArray()
    .Where(p => p.ParagraphFormat.StyleIdentifier == StyleIdentifier.ListBullet);
    
foreach (var bullet in bullets)
{
    listBox19.Items.Add(bullet.GetText().ToString());
}
    
listBox19.Items.Add(bullet1.GetText().ToString());

我也尝试使用 listbullet1、2、3、4 和 5 样式标识符,但这也不能解决问题。

【问题讨论】:

  • 基于对apireference.aspose.com/words/net/aspose.words/styleidentifier 的快速浏览,项目符号列表似乎有不止一种样式。尝试将第二个 Where() 子句更改为使用 StyleIdentifier.ListBullet2 等。也许问题在于使用的项目符号样式不是 ListBullet。
  • 哦,对不起,我忘了提到我确实尝试了 listbullet1,2,3,4 和 5,但这也不能解决问题

标签: c# aspose.words .doc


【解决方案1】:

很可能您的代码不起作用,因为项目符号不是通过样式应用的。在 MS Word 文档中有几个级别可以应用格式:文档默认值、主题、样式和直接格式。我认为,就您而言,最好的方法是使用 ListFormat.IsListItem 属性。

【讨论】:

    【解决方案2】:

    我现在正在使用它成功地从 word 文件中提取列表项并将它们放入列表框中。

           string fileName = listBox1.Items.Cast<string>().FirstOrDefault();
                    // Open the document.
                    Document doc = new Document(fileName);
    
                    doc.UpdateListLabels();
    
                    NodeCollection paras = doc.GetChildNodes(NodeType.Paragraph, true);
    
                    // Find if we have the paragraph list. In our document, our list uses plain Arabic numbers,
                    // which start at three and ends at six.
                    foreach (Aspose.Words.Paragraph paragraph in paras.OfType<Aspose.Words.Paragraph>().Where(p => p.ListFormat.IsListItem))
                    {
                        //listBox19.Items.Add($"List item paragraph #{paras.IndexOf(paragraph)}");
    
                        // This is the text we get when getting when we output this node to text format.
                        // This text output will omit list labels. Trim any paragraph formatting characters. 
                        string paragraphText = paragraph.ToString(SaveFormat.Text).Trim();
                        //remove the dot in front of the bullet
                        string bullet = paragraphText.Remove(0, 2);
    
                        listBox19.Items.Add(bullet);
    
                        ListLabel label = paragraph.ListLabel;
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2013-05-06
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多