Gibt es eine Möglichkeit, ein ganzes docx-Dokument in ein anderes docx-Dokument einzufügen, ohne Altchunks zu verwenden? Das Problem ist, dass ich nach dem Einfügen das resultierende Dokument mit einem anderen unter Verwendung DocumentBuilder von OpenXml Powertools zusammenführen muss und es Dokumente nicht unterstützt, die Altchunks enthält.So fügen Sie ein docx-Dokument an einer bestimmten Position in ein anderes docx ein ohne Altchunk
1
A
Antwort
0
Ok, also habe ich eine Lösung gefunden. Um ein Dokument an einer bestimmten Position einzufügen, teile ich das Originaldokument in zwei Quellen für den DocumentBuilder, dann erstellte ich eine Quelle aus dem einzufügenden Dokument. Am Ende habe ich ein neues Dokument mit diesen 3 Quellen erstellt und es scheint gut zu funktionieren.
Ich suche nach dem Absatz, um das Originaldokument durch einen Platzhalter zu teilen, zum Beispiel "@@ einfügen @@".
Bellow ist der Code, wenn jemand es braucht.
var paragraph = DestinationDocument.MainDocumentPart.Document.Descendants<OpenXmlParagraph>().FirstOrDefault(item => item.InnerText.Contains(placeHolder));
if (paragraph != null)
{
var idOfParagraph =
DestinationDocument.MainDocumentPart.Document.Descendants<OpenXmlParagraph>()
.ToList()
.IndexOf(paragraph);
//save and close current destination document
SaveChanges(destinationFilePath, false);
var sources = new List<Source>();
var originalDocument = new WmlDocument(destinationFilePath);
sources.Add(new Source(originalDocument, 0, idOfParagraph, true)); // add first part of initial document
var documentToBeInserted = new WmlDocument(docFilePath);
sources.Add(new Source(documentToBeInserted, true)); // add document to be inserted
sources.Add(new Source(originalDocument, idOfParagraph + 1, true)); // add rest of initial document
var newDestinationDocument = DocumentBuilder.BuildDocument(sources); // build new document
newDestinationDocument.SaveAs(destinationFilePath); // save
// re-open destination document
DestinationDocument = WordprocessingDocument.Open(Path.GetFullPath(destinationFilePath), true);
}