我必须实现一个 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。
我已经尝试了几种方法,但我没有设法让它适用于每种情况。
你可以找到这段小代码here
先决条件是一个包含图表和图形的 Excel 文件模板。
编辑:生成的文档始终适用于 Microsoft Office 2007(无论是否有两个有问题的代码行)。我仍在寻求解决方案!
最佳答案
我终于找到了解决方案!
问题是由于两件事: 我没有正确放置外部数据,外部关系错误。
这段代码让它工作:
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。
也许这会对某些人有所帮助!
关于c# - 使用 OpenXML 在 Word 2010 和 2003 中嵌入 Excel 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426901/