Как вставить документ DOCX в другой документ в определенной позиции без altchunk

Есть ли способ вставить целый документ DOCX в другой, не используя altchunks? Проблема в том, что после вставки мне нужно объединить полученный документ с другим с помощью DocumentBuilder из OpenXml Powertools, и он не поддерживает документы, содержащие altchunks.

1 ответ

Решение

Итак, мне удалось найти решение. Чтобы вставить документ в определенную позицию, я разделил исходный документ на два источника для DocumentBuilder, а затем создал источник из документа для вставки. В конце концов я создал новый документ с этими 3 источниками, и он, кажется, работает просто отлично.

Я ищу абзац, чтобы разделить исходный документ заполнителем, например "@@ insert @@".

Сильфон - это код, если кому-то это нужно.

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);
                }
Другие вопросы по тегам