如何在没有altchunk

时间:2016-05-27 06:57:56

标签: c# .net openxml openxml-sdk wordprocessingml

有没有办法在不使用altchunks的情况下将整个docx文档插入另一个文档?问题是插入后我必须使用OpenXml Powertools中的 DocumentBuilder 将结果文档与另一个文档合并,并且它不支持包含altchunks的文档。

1 个答案:

答案 0 :(得分: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);
                }