【问题标题】:DocX - how to get the index of a paragraph or list?DocX - 如何获取段落或列表的索引?
【发布时间】:2015-03-25 21:42:50
【问题描述】:

我正在开发一个应用程序,该应用程序需要将来自用户输入(包括来自富文本编辑器)的内容插入到 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>();

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

【问题讨论】:

  • 段落中是否有您要查找索引的标签?
  • 不,我一直在寻找一种在文档中给定索引处插入一些内容的方法,就像您将某些内容插入到特定的数组索引中一样。但是,我最终将“默认”内容放入页眉和页脚,从而解决了我最初的问题。尽管如此,如何使用接受索引参数的“InsertSomething”方法的最初问题仍未得到解答。..
  • 您可以使用Paragraph p = doc.Paragraphs[0]; 获取索引,然后使用p.InsertParagraphAfterSelf(newP);doc.Paragraphs 是文档Paragraphs 的列表。我仍然不确定你想要达到什么目的。在多个Paragraphs 之后插入Paragraph?很高兴您找到了解决问题的方法。
  • 确实可以访问Paragraphs集合。然而,据我所知(我已经有一段时间没有做这个了),这个集合包含文档中的所有段落,包括页眉、页脚、列表项等。但坦率地说,我认为我的案例有点像边缘情况,我解决它的方式比我试图做的更好。不过还是谢谢 :)
  • @KristianJohannessen 你找到解决这个问题的方法了吗?如果可以,请与我分享。谢谢

标签: c# ms-word novacode-docx


【解决方案1】:

完成您所要求的最简单的方法是在 Word 中编辑您的模板文档,然后在其中您要添加内容的地方插入一个书签。然后你可以使用:

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

插入内容。

【讨论】:

  • 是的,这也可以。我实际上使用书签在文档标题的不同位置插入内容。使用标题允许我通过添加段落来插入内容。但如果标题不能满足您的需求,书签会很棒。所以标记为答案!
猜你喜欢
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
相关资源
最近更新 更多