C#在Microsoft.Office.Interop.Word.List的列表项中获取第二段

时间:2019-09-12 17:33:52

标签: c# ms-word office-interop

我正在使用C#来获取Microsoft WORD文档中列表的所有列表项。该文档只有一个列表,如下所示。列表的第三项包含第二段。

问题:以下代码未获得列表第三项的第二段。我可能会缺少什么,我们如何在输出中获得第二段(如下所示)?

注意:我使用的是C#,但也可以使用VBA解决方案。

WORD文档的快照

enter image description here

代码

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 ahit Enter。第二个列表项将自动创建。在此处键入Item bhit 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中有一个段落。

enter image description here

1 个答案:

答案 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";
}