我正在使用C#
来获取Microsoft WORD
文档中列表的所有列表项。该文档只有一个列表,如下所示。列表的第三项包含第二段。
问题:以下代码未获得列表第三项的第二段。我可能会缺少什么,我们如何在输出中获得第二段(如下所示)?
注意:我使用的是C#
,但也可以使用VBA
解决方案。
WORD文档的快照:
代码:
Using System
using Word = Microsoft.Office.Interop.Word;
....
static void Test()
{
Word.Application oApp = new Word.Application();
oApp.Visible = true;
Word.Document oDoc = oApp.Documents.Open(@"C:\MyFolder\MyDoc.docx");
string sList = "";
Word.List oLst = oDoc.Lists[1];
for (int j = 1; j <= oLst.ListParagraphs.Count; j++)
{
sList += oLst.ListParagraphs[j].Range.Text + "\n";
}
Console.Write(sList);
sList = "";
oDoc.Close(SaveChanges: Word.WdSaveOptions.wdDoNotSaveChanges);
oApp.Quit();
}
VS2019中的“输出”窗口的快照
Item a
Item b
Item c
Item d
Item e
Item k
所需的输出:
Item a
Item b
Item c
A new paragraph in the list item c
Item d
Item e
Item k
更新:
list item 3
中的段落是按以下常规方式创建的:
通过单击功能区上的numbered list
按钮来创建第一个列表项(如下图所示)。然后键入Item a
和hit Enter
。第二个列表项将自动创建。在此处键入Item b
和hit Enter
。自动创建第三个列表项。等等......
现在所有6个项目均已创建,您回到list item 3
,在Item c
行之后,您hit Enter
。创建了一个新的列表项作为列表项4(其余列表项被重新编号-该列表现在有7个项)。在新创建的列表项4上,然后单击功能区上的numbered list
按钮。新创建的列表项4将被删除,并替换为在其中键入A new paragraph in the list item c
的空白行。该列表现在有6个项目,列表项目3中有一个段落。
答案 0 :(得分:1)
如果这确实是一个独立的段落-ANSI 13(而不是新行-ANSI 11),那么就Word而言,它不能成为列表的成员。它打断了名单。这就是为什么ListParagraphs
中不包含它的原因。
可能的是创建一个标准Range
对象(不区分List和非List段落)并将其循环。例如:
Word.List oLst = doc.Lists[1];
Word.Range startList = oLst.Range;
Word.Range endList = startList.Duplicate;
startList.End = endList.End;
for (int j = 1; j <= startList.Paragraphs.Count; j++)
{
sList += startList.Paragraphs[j].Range.Text + "\n";
}