PowerPoint 2016 사용자가 생성 한 PPTX 파일이 있습니다. 추가 처리를 위해 액세스해야하는 Excel 워크 시트가 포함되어 있습니다. 내 프로젝트에서 Open Xml SDK v2.6.1을 사용하고 있습니다. 나는 다음과 같은 예외가 얻을System.IO.FileFormatException OpenXml SDK가 포함 된 PowerPoint 2016에 포함 된 Excel 워크 시트 열기
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의 파일 정보를 보면 ZipArchive가 아니라 SFX Zip 볼륨이라는 것을 알 수 있습니다.
SpreadsheetDocument에서 포함 된 개체 스트림을 열 수있는 유일한 방법은 DotNetZip 라이브러리를 사용하여 스트림을 System.IO.Compression.ZipArchive로 변환하는 것이 었습니다.
- 포함 된 Excel 워크 시트 스트림을 열려면 열기 XML SDK를 얻을 수있는 방법이 있나요, 명시 적 트랜스 코딩없이 (SFX 우편 볼륨에서 아카이브를 우편하기) :
그래서 나는 다음과 같은 질문이?
- 수정 된 스트림을 프레젠테이션 문서에 다시 쓰는 가장 좋은 방법은 무엇입니까? 이는 워크 시트 데이터가 업데이트되어 호스트 문서에 다시 기록되어야하기 때문에 중요합니다.
- 이 문제를 해결하기위한 좀 더 우아한 방법이 있습니까?
참고 : 프레젠테이션에서 OpenXml SDK를 사용하여 프로그래밍 방식으로 워크 시트를 포함하면이 문제가 발생하지 않습니다.