Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Word文档中嵌入Excel图形,使用OpenXML处理Word 2010和2003_C#_Excel_Ms Word_Openxml Sdk - Fatal编程技术网

C# 在Word文档中嵌入Excel图形,使用OpenXML处理Word 2010和2003

C# 在Word文档中嵌入Excel图形,使用OpenXML处理Word 2010和2003,c#,excel,ms-word,openxml-sdk,C#,Excel,Ms Word,Openxml Sdk,我必须实现一个Microsoft Word文档生成器,其中嵌入excel图形。 我的一个限制是使生成的docx能够与Microsoft word 2010和2003+兼容包一起工作 我没能让它对他们俩都起作用。我可以使它适用于Word 2010,但该文档不适用于2003,反之亦然 在多次搜索Word 2003后,我在代码中添加了以下内容: private static void Word2003(ChartPart importedChartPart, MainDocumentPart

我必须实现一个Microsoft Word文档生成器,其中嵌入excel图形。 我的一个限制是使生成的docx能够与Microsoft word 2010和2003+兼容包一起工作

我没能让它对他们俩都起作用。我可以使它适用于Word 2010,但该文档不适用于2003,反之亦然

在多次搜索Word 2003后,我在代码中添加了以下内容:

    private static void Word2003(ChartPart importedChartPart, MainDocumentPart mainDocumentPart, Stream fileStream)
    {
        var ext = new ExternalData { Id = "rel" + 5 };
        importedChartPart.ChartSpace.InsertAt(ext, 3);


        var fi = new FileInfo(@"generated.xlsx");
        importedChartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/package", new Uri(fi.Name, UriKind.Relative), "rel5");

        EmbeddedPackagePart embeddedObjectPart = mainDocumentPart.AddEmbeddedPackagePart(@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        Stream copyStream = new MemoryStream();
        fileStream.CopyTo(copyStream);
        embeddedObjectPart.FeedData(copyStream);
    }
但此时生成的文档不能与Word 2010一起使用。如果我删除这两个对齐:

 var ext = new ExternalData { Id = "rel" + 5 };
 importedChartPart.ChartSpace.InsertAt(ext, 3);
根据以前的代码,它适用于Word 2010,但不适用于Word 2003

我试过几种方法,但都没能成功

您可以找到这段代码

先决条件是Excel文件模板,其中包含图表和图形



编辑:生成的文档始终适用于MicrosoftOffice2007(是否有两行有问题的代码)。我还在寻找解决办法

我终于找到了解决办法

问题是由两方面造成的: 我没有正确放置外部数据,外部关系错误

此代码使其工作:

private static void Word2003(ChartPart importedChartPart, MainDocumentPart mainDocumentPart, Stream fileStream)
{
    // Add of the external data id
    ExternalData ext = new ExternalData { Id = "rel" + 5 };
    AutoUpdate autoUpdate = new AutoUpdate{ Val = false};
    ext.Append(autoUpdate);
    importedChartPart.ChartSpace.Append(ext);

    // Set of the relationship
    var fi = new FileInfo(@"generated.xlsx");
    importedChartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject", new Uri(fi.Name, UriKind.Relative), "rel5");

    // Link to the embedded file
    EmbeddedPackagePart embeddedObjectPart = mainDocumentPart.AddEmbeddedPackagePart(@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    Stream copyStream = new MemoryStream();
    fileStream.CopyTo(copyStream);
    embeddedObjectPart.FeedData(copyStream);
}
现在生成的Word文档可用于Word 2003、2007和2010


也许这会有帮助

OpenXmlValidator是否报告了任何验证错误?否,生成的文件是有效的。我有类似的问题。我正在用word动态创建图表,我必须再次动态地为该图表添加generated.xlsx。我想问你,fileStream的内容是什么?generated.xlsx是否包含importedChartPart的值?谢谢