使用Word 2010和2003,使用OpenXML在Word文档中embeddedExcelgraphics
我必须实现一个embeddedExcelgraphics的Microsoft Word文档生成器。 我的一个制约因素是使我生成的docx与Microsoft Word 2010和2003 +兼容包一起工作。
我没有设法使它们都适用于他们。 我可以使它适用于Word 2010,但该文档不适用于2003,反之亦然。
经过多次search,使其在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一起使用。如果我删除这两个ligne:
var ext = new ExternalData { Id = "rel" + 5 }; importedChartPart.ChartSpace.InsertAt(ext, 3);
从以前的代码,它适用于Word 2010,但不适用于Word 2003。
我已经尝试了几件事情,但是我没有设法使每个案件都适用。
你可以在这里find这个小代码
先决条件是Excel文件模板,其中包含图表和graphics。
编辑:生成的文档总是与Microsoft Office 2007(与两个有问题的代码行或不)。 我仍在寻求解决scheme!
我终于find了解决scheme!
问题是由于两件事情:我没有正确地把外部数据和外部关系是错误的。
这段代码使它工作:
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。
也许这会帮助别人!