使用WordProcessingDocument

时间:2020-02-19 06:23:29

标签: c# ms-word openxml-sdk memorystream

我正在使用WordprocessingDocument来读写Word文档中的内容,但是当我使用MemoryStream打开文档时,它没有向我显示图像和页眉/页脚中已经存在的内容。 Word文档。下面是相同的代码。

private void AddReport(MainDocumentPart parent, MemoryStream report)
        {
            using (MemoryStream editingMemoryStream = new MemoryStream())
            {
                report.Position = 0;
                report.CopyTo(editingMemoryStream);
                editingMemoryStream.Position = 0;
                using (WordprocessingDocument newDoc = WordprocessingDocument.Open(editingMemoryStream, true))
                {
                    WP.Body Template = newDoc.MainDocumentPart.Document.Body;
                    var Main = newDoc.MainDocumentPart;
                    var cloneTemplate = Template.CloneNode(true);

                    parent.Document.Body.PrependChild(new WP.Paragraph(new WP.Run(cloneTemplate)));
                    parent.Document.Save();
                }
            }
        }

word文档的屏幕截图: enter image description here 在此,父文档是我在上面文档之前的文档。任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

页眉,页脚和图像不是文档正文的一部分,因此在描述的情况下不会被带到另一个文档中。

所有这些信息都存储在Word文件的“ zip包”中包含的单独的“ xml部件”中。 Body部分仅包含 refereces (“相关”部分中列出的关系ID,指向/链接到包中包含的相关xml部分)。

这可以通过在Open XML SDK生产率工具中打开文档并检查基本的Word Open XML来看到。

为了将此类内容复制到另一个文档中,不仅必须克隆主体,而且还要克隆每个具有所需内容的xml部分,同时动态生成必要的关系-这不是一件容易的事。互联网上以及其他地方(包括我的博客WordMeister)上的帖子都展示了如何完成此操作的基础知识,您可以以此为起点来了解所需的方法。

或者,根据父文档的类型,从“新”文档的副本开始并用其他内容进行编辑可能更有意义。

FWIW,为了完整起见,在这里提到:COM对象模型将执行所描述的操作-复制文档的主体并将其粘贴到另一个文档中会保留所有这些信息。但是Word应用程序正在执行开发人员在使用Open XML SDK时需要进行编码的所有“繁重工作”。

相关问题