将模板插入模板 - C# Open XML SDK 2.0/2.5
Inserting a Template into a Template - C# Open XML SDK 2.0/2.5
我正在编写一些代码来操作预先存在的 .DOTX 模板文件中的书签。对于这个问题,一些书签是为了指向另一个.DOTX文件并将其插入到当前文档中。
我很难找到一种方法来执行此操作,而无需进行大量操作并挖掘第二个模板中的每个元素并在当前文档中创建类似的元素。
有人知道如何轻松地做到这一点吗?
事实证明比我想象的要容易。
foreach (BookmarkStart bookmark in mainDoc.RootElement.Descendants<BookmarkStart>().Where(b => String.Equals(b.Name, bookmarkName)))
{
var parent = bookmark.Parent;
using (WordprocessingDocument newTemplate = WordprocessingDocument.Open(template2, false))
{
var newTemplateBody = newTemplate.MainDocumentPart.Document.Body;
foreach (var element in newTemplateBody.Elements().Reverse<OpenXmlElement>())
{
parent.InsertAfterSelf<OpenXmlElement>((OpenXmlElement)element.Clone());
}
}
}
我显然做对了所有事情,但是我在段落中插入了模板。模板是一个table,不能嵌套在段落中。这才是真正破坏我的文档的原因。
我正在编写一些代码来操作预先存在的 .DOTX 模板文件中的书签。对于这个问题,一些书签是为了指向另一个.DOTX文件并将其插入到当前文档中。
我很难找到一种方法来执行此操作,而无需进行大量操作并挖掘第二个模板中的每个元素并在当前文档中创建类似的元素。
有人知道如何轻松地做到这一点吗?
事实证明比我想象的要容易。
foreach (BookmarkStart bookmark in mainDoc.RootElement.Descendants<BookmarkStart>().Where(b => String.Equals(b.Name, bookmarkName)))
{
var parent = bookmark.Parent;
using (WordprocessingDocument newTemplate = WordprocessingDocument.Open(template2, false))
{
var newTemplateBody = newTemplate.MainDocumentPart.Document.Body;
foreach (var element in newTemplateBody.Elements().Reverse<OpenXmlElement>())
{
parent.InsertAfterSelf<OpenXmlElement>((OpenXmlElement)element.Clone());
}
}
}
我显然做对了所有事情,但是我在段落中插入了模板。模板是一个table,不能嵌套在段落中。这才是真正破坏我的文档的原因。