C# 使用OpenXML和streams的ePlus

C# 使用OpenXML和streams的ePlus,c#,.net,openxml,epplus,memorystream,C#,.net,Openxml,Epplus,Memorystream,我正在尝试自动化Powerpoint演示文稿。我正在使用OpenXML浏览powerpoint演示文稿,直到找到链接到图表的Excel。现在我想使用EPPlus将一个数据表加载到一个工作表中(因为EPPlus有一个简单的LoadFromDataTable函数,而我认为我必须编写大量代码才能使用OpenXML)。 所以我的问题是这个 我记忆中有一份演示文稿。我已经导航到我想通过以下方式操作的特定图表: doc.PresentationPart.SlideParts.ElementAt(0).Cha

我正在尝试自动化Powerpoint演示文稿。我正在使用OpenXML浏览powerpoint演示文稿,直到找到链接到图表的Excel。现在我想使用EPPlus将一个数据表加载到一个工作表中(因为EPPlus有一个简单的LoadFromDataTable函数,而我认为我必须编写大量代码才能使用OpenXML)。 所以我的问题是这个

我记忆中有一份演示文稿。我已经导航到我想通过以下方式操作的特定图表:

doc.PresentationPart.SlideParts.ElementAt(0).ChartParts.ElementAt(0)
我使用以下方法获取Excel部件:

var stream = chartpart.EmbeddedPackagePart.GetStream()
然后我试着:

using(var pck = new ExcelPackage(stream)) {
    `do stuff;
    `pck.Save();
}
最后我做了一个doc.PresentationPart.Presentation.Save,但这并没有改变演示文稿。我可以改为使用OpenXML进行更改:

using (var xl =  Spreadsheet.Document.Open(stream, true))
{
    `do stuff;
    `xl.Close();
}

其他一切都一样。因此,我猜要么xl.Close()正在做pck.Save()没有做的事情,要么我正在错误地使用流-有人能建议吗?

而不是执行
package.Save()
如果执行
var bytes=package.GetAsByteArray()
并将其写回原始流会怎么样?我没有太多的powerpoint编码,但如果流对象是可写的,它可能会工作。也许发布一份代码的工作副本以引起更多关注。我最终使用OpenXML加载了数据。与EmbeddedPackageParts和缓存仍有其他问题,但将分别发布这些问题。无论如何谢谢你