使用C#中的aspose.words从word文档中提取项目符号



我需要从C#中的word文档中提取具有项目符号样式的文本。我正在使用aspose.words库,但也欢迎使用不同库的解决方案。我已经可以上传文档并提取带有heading1样式的文本。但当我尝试同样的子弹造型时,我一无所获。

我使用下面的代码来获得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样式标识符,但这也不能解决问题。

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

我现在使用它成功地从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;
}

相关内容

  • 没有找到相关文章

最新更新