DocX - 如何获取段落或列表的索引?

时间:2015-01-27 10:04:02

标签: c# ms-word novacode-docx

我正在开发一个应用程序,需要将用户输入(包括富文本编辑器)中的内容插入到Word文档中。为此,我使用DocX库(http://docx.codeplex.com/)。只要您只需要将内容插入到空文档中,该库就可以提供一种非常巧妙的方式来完成某些任务并且工作得很好。

但是,我需要插入的文档是一个已经有一些内容的模板。我需要的是能够在文档中的此内容之后插入用户输入。像这样:

此处有一些默认内容。

[这是我想要的内容]

此处有其他一些默认内容。

DocX具有将段落和列表插入文档的方法:

using(var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(PathToTestFile))
{
    var doc = DocX.Load(stream); //will have two paragraphs
    var p = doc.InsertParagraph(); //adds a new, empty paragraph to the end of the document
    var list = doc.AddList(listType: ListItemType.Numbered); //adds a list
    doc.AddListItem(list, "Test1", listType: ListItemType.Numbered); //adds a listitem to the list
    doc.InsertList(list); //adds a list to the end of the document
}

段落还有一种方法可以在og之后插入某些对象,如表格或其他段落:

//given a Paragraph p and another Paragraph newP:
p.InsertParagraphAfterSelf(newP);

列表具有相同的方法,但两者都没有选择对其他列表执行相同操作(即,我不能像上面的示例一样使用列表)。为此,我需要文档中段落或列表的索引。这将允许我使用接受索引作为参数的插入方法。

DocX类具有此功能(从DocX源代码中提取:http://docx.codeplex.com/SourceControl/latest#DocX/DocX.cs):

// A lookup for the Paragraphs in this document.
    internal Dictionary<int, Paragraph> paragraphLookup = new Dictionary<int, Paragraph>();

这个字典是内部的,这意味着我无法访问它。在我的生活中,我不能找到任何其他方法来查找索引,但它必须是一种方法,因为有方法需要此索引。有谁遇到过同样的问题?一个解决方案会很受欢迎!

1 个答案:

答案 0 :(得分:1)

最简单的方法是在Word中编辑模板文档并在其中插入要添加内容的书签。然后您可以使用:

document.InsertAtBookmark("Content to be added", "bookmarkname");

插入内容。