OOXML 패키징 작업

OOXML 패키징 작업

XLSX 파일은 Open Packaging Convention (OPC) ZIP 아카이브입니다. Aspose.Cells FOSS for .NET는 IPackageReader, IPackageWriter, 그리고 PackageModel 객체 그래프를 통해 기본 패키지 계층을 노출합니다. 이러한 API는 진단 및 도구용 저수준 API이며 — 대부분의 애플리케이션은 고수준 Workbook 클래스만 사용합니다.


패키지 모델

PackageModel은 XLSX 아카이브의 논리적 내용을 나타냅니다. 이는 세 개의 컬렉션을 노출합니다: Parts (모든 콘텐츠 파트), Relationships (OPC 관계 항목), 그리고 UnsupportedParts (라이브러리가 처리하지 않는 파일 내 파트). 각 파트는 PackagePartDescriptor에 의해 PartUri, ContentType, 및 Category와 함께 설명됩니다.

using Aspose.Cells_FOSS;

// PackageModel is accessed via PackageLoadContext during custom load flows
// The following illustrates the object structure
// var context = new PackageLoadContext(workbook, packageModel);
// var model = context.Package;
// foreach (var part in model.Parts)
// {
//     Console.WriteLine($"URI={part.PartUri}, Type={part.ContentType}");
// }
// Console.WriteLine("Unsupported parts: " + model.UnsupportedParts.Count);

Note: PackageModel XLSX 파일을 로드할 때 내부적으로 채워집니다. 직접 인스턴스화는 표준 고수준 워크플로의 일부가 아닙니다.


IPackageReader 및 IPackageWriter

IPackageReader은 OPC 패키지를 읽기 위한 단일 Read() 메서드를 정의합니다. IPackageWriter은 이를 쓰기 위한 단일 Write() 메서드를 정의합니다. 이러한 인터페이스는 라이브러리의 내부 ZIP 기반 리더/라이터에 의해 구현되며, 메모리 내 또는 클라우드 스토리지 시나리오를 위한 사용자 정의 구현으로 제공될 수 있습니다.

// Signature reference — not a complete runnable example
// public interface IPackageReader { void Read(...); }
// public interface IPackageWriter { void Write(...); }

PackageStructureException

PackageStructureException은 XLSX 패키지 구조가 근본적으로 잘못된 경우에 발생합니다 — 예를 들어, 필수 OPC 관계가 누락된 경우입니다. 일반 예외 계층을 확장하며, 어느 구조적 불변 조건이 위반되었는지를 설명하는 메시지를 전달합니다.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairPackage = true };

try
{
    var wb = new Workbook("bad.xlsx", opts);
}
catch (PackageStructureException ex)
{
    Console.WriteLine("OPC structure error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load error: " + ex.Message);
}

팁 및 모범 사례

  • PackageModel.UnsupportedParts을 사용하여 라운드트립 시 조용히 누락될 수 있는 비표준 파트를 찾아냅니다.
  • 신뢰할 수 없는 소스에서 파일을 로드할 때 WorkbookLoadException과 함께 PackageStructureException도 잡아야 합니다.
  • IPackageReader/IPackageWriter 인터페이스는 확장 지점이며, 사용자 정의 저장소가 필요할 때만 구현하십시오(예: 로컬 파일 없이 클라우드 블롭에서 로드하는 경우).
  • 대부분의 진단에서는 LoadDiagnostics(Workbook.LoadDiagnostics을 통해 접근 가능)이 충분합니다 — 패키지 계층까지 내려갈 필요는 거의 없습니다.

일반적인 문제

문제원인수정
PackageStructureException 로드 시필수 OPC 관계가 누락되었습니다LoadOptions에 TryRepairPackage = true을 설정합니다; 로드 후 LoadDiagnostics.Issues를 확인하십시오
UnsupportedParts이 비어 있지 않음파일에 비표준 확장자가 포함되어 있습니다이 부분들은 로드 시 존재했다면 저장 시 원문 그대로 보존됩니다
사용자 정의 IPackageReader가 호출되지 않았습니다잘못된 생성자 오버로드에 전달되었습니다사용자 정의 리더를 수용하는 LoadOptions 또는 생성자 오버로드가 사용되도록 하세요

FAQ

일반 스프레드시트 작업에 IPackageReader/IPackageWriter를 사용해야 합니까?

아니요. 이러한 인터페이스는 고급 시나리오를 위한 확장 포인트입니다. 모든 표준 읽기/쓰기 작업은 Workbook를 통해 직접 수행됩니다.

지원되지 않는 파트가 저장 시 보존됩니까?

PackageModel.UnsupportedParts에 나열된 파트는 처리되지 않으며 다시 기록되지 않을 수 있습니다. 비표준 파트에 대한 왕복 정확성이 필요하다면 zip 수준의 후처리 단계를 사용하십시오.

PackageStructureException와 WorkbookLoadException의 차이점은 무엇입니까?

PackageStructureException은 OPC/ZIP 수준의 실패(콘텐츠 유형 누락, 관계 손상)를 나타냅니다. WorkbookLoadException은 XLSX 콘텐츠에서 더 높은 수준의 구문 분석 또는 의미론적 실패를 나타냅니다.


API Reference 요약

클래스 / 인터페이스설명
IPackageReaderOPC 패키지를 읽기 위한 인터페이스 (Read 메서드)
IPackageWriterOPC 패키지를 작성하기 위한 인터페이스 (Write 메서드)
PackageLoadContextWorkbook를 해당 PackageModel에 바인딩합니다
PackageLoadContext.PackagePackageModel를 반환합니다
PackageModel.Parts패키지 내 모든 콘텐츠 파트
PackageModel.RelationshipsOPC 관계 항목
PackageModel.UnsupportedParts라이브러리에서 처리되지 않는 파트
PackagePartDescriptor.PartUri파트에 대한 OPC URI
PackagePartDescriptor.ContentType파트의 MIME 콘텐츠 유형
PackagePartDescriptor.Category논리적 카테고리 (워크시트, 스타일 등)
PackageStructureExceptionOPC 구조 위반 시 발생

참조

 한국어