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:
PackageModelXLSX 파일을 로드할 때 내부적으로 채워집니다. 직접 인스턴스화는 표준 고수준 워크플로의 일부가 아닙니다.
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 요약
| 클래스 / 인터페이스 | 설명 |
|---|---|
IPackageReader | OPC 패키지를 읽기 위한 인터페이스 (Read 메서드) |
IPackageWriter | OPC 패키지를 작성하기 위한 인터페이스 (Write 메서드) |
PackageLoadContext | Workbook를 해당 PackageModel에 바인딩합니다 |
PackageLoadContext.Package | PackageModel를 반환합니다 |
PackageModel.Parts | 패키지 내 모든 콘텐츠 파트 |
PackageModel.Relationships | OPC 관계 항목 |
PackageModel.UnsupportedParts | 라이브러리에서 처리되지 않는 파트 |
PackagePartDescriptor.PartUri | 파트에 대한 OPC URI |
PackagePartDescriptor.ContentType | 파트의 MIME 콘텐츠 유형 |
PackagePartDescriptor.Category | 논리적 카테고리 (워크시트, 스타일 등) |
PackageStructureException | OPC 구조 위반 시 발생 |