我正在阅读一个word文档(将其转换为HTML),并想知道每个段落的类型(至少是我认为我想这样做的方式)。
我的代码看起来像这样
Application application = new Application();
var doc = application.Documents.Open("D:\\myDoc.docx");
for (int i = 0; i < doc.Paragraphs.Count; i++)
{
Console.WriteLine($"{doc.Paragraphs[i + 1].Range.ParagraphStyle.NameLocal}");
}
例如输出 Header 1 , Normal 和 List Paragraph 。所以我的问题。我无法看到 List Paragraph 是子弹列表还是数字列表。问题,我怎么知道列表的类型?
答案 0 :(得分:3)
使用Range.ListFormat.ListType
,其中包含以下值:
// Summary:
// Specifies a type of list.
public enum WdListType
{
// Summary:
// List with no bullets, numbering, or outlining.
wdListNoNumbering = 0,
//
// Summary:
// ListNum fields that can be used in the body of a paragraph.
wdListListNumOnly = 1,
//
// Summary:
// Bulleted list.
wdListBullet = 2,
//
// Summary:
// Simple numeric list.
wdListSimpleNumbering = 3,
//
// Summary:
// Outlined list.
wdListOutlineNumbering = 4,
//
// Summary:
// Mixed numeric list.
wdListMixedNumbering = 5,
//
// Summary:
// Picture bulleted list.
wdListPictureBullet = 6,
}
答案 1 :(得分:0)
区分两个Word列表可能还不够。 我不知道究竟什么意思是“概述列表”,但似乎数字列表和项目符号列表都在此类别中。
那么,你能做什么?
选项1。您可以使用Range.ListFormat.ListString
来确定标记列表的文本。它可以是项目符号,数字,三角形或word文件中定义的任何内容。但这不是一个好主意,因为你永远不知道那里存储了什么价值,所以你无法比较它。
选项2。您可以使用WdListNumberStyle枚举,虽然它有点复杂。我会试着解释一下。
有一个名为Range.ListFormat.ListTemplate.ListLevels
的属性,它存储所有可能列表级别的列表格式。通常列表具有1级格式,嵌套列表的格式分别为2到9(看起来您可以为MS Word中的嵌套列表定义9种不同的格式)。因此,您需要获取Range.ListFormat.ListTemplate.ListLevels
属性的第一项并检查其NumberStyle
属性(请参阅上面的链接)。但是,由于ListLevels
仅支持IEnumerable
接口,因此您无法获得某些元素。你可以使用这样的东西:
private static Word.WdListNumberStyle GetListType(Word.Range sentence)
{
foreach (Word.ListLevel lvl in sentence.ListFormat.ListTemplate.ListLevels)
{
return lvl.NumberStyle;
}
}
或者更具体地说
private static Word.WdListNumberStyle GetListType(Word.Range sentence, byte level)
{
foreach (Word.ListLevel lvl in sentence.ListFormat.ListTemplate.ListLevels)
{
if (level == 1)
return lvl.NumberStyle;
level--;
}
}
我不知道这对问题的作者是否有帮助,但由于我遇到了问题,在寻找解决方案时,我来到这里并没有找到一个,我决定发布我发现的内容。我不知道为什么它必须如此复杂以及为什么你不能直接从ListTemplate
得到描述列表样式的值。