【发布时间】: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