我有用戶使用PowerPoint 2016生成的PPTX文件。幻燈片嵌入了需要進一步處理的Excel工作表。我在我的項目中使用Open Xml SDK v2.6.1。使用OpenXml SDK打開嵌入在PowerPoint 2016中的Excel工作表中的System.IO.FileFormatException
在嵌入式對象物流進入SpreadsheetDocument,使用下面的代碼:
using (PresentationDocument pd = PresentationDocument.Open(pptxFile, true))
{
foreach (SlidePart slide in pd.PresentationPart.GetPartsOfType<SlidePart>())
{
foreach (EmbeddedObjectPart eoPart in slide.EmbeddedObjectParts)
{
using (SpreadsheetDocument sd = SpreadsheetDocument.Open(eoPart.GetStream(), true))
{
// do some work with worksheets
var count = sd.WorkbookPart.WorksheetParts.Count();
}
}
}
}
我得到以下異常:
System.IO.FileFormatException: File contains corrupted data.
at System.IO.Packaging.ZipPackage..ctor(Stream s, FileMode packageFileMode, FileAccess packageFileAccess)
at System.IO.Packaging.Package.Open(Stream stream, FileMode packageMode, FileAccess packageAccess)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.OpenCore(Stream stream, Boolean readWriteMode)
at DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(Stream stream, Boolean isEditable, OpenSettings openSettings)
at...
當我打開PPTX包,並在嵌入物的文件夾將oleObject1.bin重命名爲oleObject1.zip,然後在WinRar中查看文件信息,我發現它是SFX Zip卷而不是ZipArchive。
我可以讓SpreadsheetDocument打開嵌入式對象流的唯一方法是使用DotNetZip庫將流轉換爲System.IO.Compression.ZipArchive。
所以,我有以下問題:
- 有沒有辦法讓開放XML SDK來打開嵌入Excel工作表流,沒有明確的轉碼(從SFX郵編卷ZIP壓縮包)?
- 將修改後的流寫回演示文稿文檔的最佳方式是什麼?這很重要,因爲工作表數據將被更新並且必須寫回主機文檔。
- 有沒有更好的方法來解決這個問題?
注意:當演示文稿中使用OpenXml SDK以編程方式嵌入工作表時,不會出現此問題。