c# - System.IO.FileFormatException on opening excel worksheet embedded in PowerPoint 2016 with OpenXml SDK -


i have pptx files generated users powerpoint 2016. slides have embedded excel worksheets need access further processing. using open xml sdk v2.6.1 in project.

on passing embedded object stream spreadsheetdocument, using following code:

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))       {         // work worksheets                                         var count = sd.workbookpart.worksheetparts.count();       }     }   } } 

i following exception:

system.io.fileformatexception: file contains corrupted data. @ system.io.packaging.zippackage..ctor(stream s, filemode packagefilemode, fileaccess packagefileaccess) @ system.io.packaging.package.open(stream stream, filemode packagemode, fileaccess packageaccess) @ documentformat.openxml.packaging.openxmlpackage.opencore(stream stream, boolean readwritemode) @ documentformat.openxml.packaging.spreadsheetdocument.open(stream stream, boolean iseditable, opensettings opensettings) at... 

when open pptx package , in embeddings folder rename oleobject1.bin oleobject1.zip, see file information in winrar, see sfx zip volume , not ziparchive.

the way spreadsheetdocument open embedded object stream convert stream system.io.compression.ziparchive using dotnetzip library.

so have following questions:

  1. is there way open xml sdk open embedded excel worksheet stream, without explicit transcoding (from sfx zip volume zip archive)?
  2. what best way write modified stream presentation document? important because, worksheet data updated , has written host document.
  3. is there more elegant way solve issue?

note: issue not occur when worksheet embedded programmatically using openxml sdk in presentation.

i figured out though tool winrar shows embedded object sfx zip volume, ms-cfb (compound file binary) file.

you can work cfb files in following ways:

  1. windows api: ole32.dll provides methods read , write cfb files. found excellent article on topic.
  2. there useful resources on this page refer open source options.

bottom line, in order work office documents embedded in other office documents embedded objects, saved in ms-cfb format. reading , writing these files needs done outside of open xml sdk, either using win api or other alternative.


Comments

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -