OOXML 패키징을 .NET에서 작업하는 방법
XLSX 파일은 Open Packaging Convention (OPC) ZIP 아카이브입니다. Aspose.Cells .NET용 FOSS는 PackageModel, PackagePartDescriptor, IPackageReader, IPackageWriter을 통해 기본 패키지 구조를 노출합니다. 이러한 API는 주로 진단 및 맞춤형 저장소 구현에 유용한 인프라 수준 API입니다. dotnet add package Aspose.Cells_FOSS로 설치하세요.
단계별 가이드
1단계: 패키지 설치
dotnet add package Aspose.Cells.FOSS2단계: 네임스페이스 가져오기
using Aspose.Cells_FOSS;3단계: PackageStructureException 처리
PackageStructureException은(는) XLSX 패키지에 잘못된 OPC 구조(예: 필수 관계 누락)가 있을 때 발생합니다. 신뢰할 수 없는 소스에서 파일을 로드할 때 WorkbookLoadException와 함께 잡아 처리하십시오.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("suspect.xlsx", opts);
Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure invalid: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}단계 4: IPackageReader 및 IPackageWriter 이해하기
IPackageReader은(는) OPC 패키지를 읽기 위한 Read() 메서드를 정의하고; IPackageWriter은(는) 쓰기를 위한 Write() 메서드를 정의합니다. 라이브러리는 기본 ZIP 기반 구현을 제공합니다. 파일 시스템이 아닌 저장소(예: 클라우드 블롭 또는 인메모리 버퍼)에서 로드하거나 저장할 때 사용자 정의 구현을 제공할 수 있습니다.
// Signature reference
// public interface IPackageReader { void Read(/* ... */); }
// public interface IPackageWriter { void Write(/* ... */); }
//
// Standard usage: pass a Stream to the Workbook constructor
using Aspose.Cells_FOSS;
using System.IO;
byte[] fileBytes = File.ReadAllBytes("data.xlsx");
using var ms = new MemoryStream(fileBytes);
var wb = new Workbook(ms);
Console.WriteLine("Loaded from stream: " + wb.Worksheets.Count + " sheet(s)");단계 5: 지원되지 않는 파트 확인
XLSX 파일을 로드할 때, PackageModel.UnsupportedParts은(는) 라이브러리가 처리하지 않는 파트를 나열합니다. 이러한 파트는 보존되지만 해석되지 않습니다. 모델을 검사하려면 사용자 정의 로드 흐름 중에 PackageLoadContext에 접근하십시오.
// PackageModel is populated internally during Workbook construction.
// Use LoadDiagnostics to detect load-time structural warnings without
// dropping to the PackageModel level directly.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
Console.WriteLine("Package had " + diag.Issues.Count() + " repair entries.");일반적인 문제 및 해결 방법
PackageStructureException 조차도 예외가 발생합니다 TryRepairPackage = true. 일부 OPC 구조적 결함은 자동 복구를 초과합니다 (예: content-type 맵이 완전히 누락된 경우). 파일이 유효한 ZIP인지 확인하십시오 with unzip -t file.xlsx. 유효한 경우, 암호화되었을 수 있습니다 — 암호로 보호된 파일은 지원되지 않습니다.
Workbook 로드되지만 일부 콘텐츠가 누락되었습니다. Check LoadDiagnostics.Issues for DataLossRisk = true 항목들. 이는 복구 중에 누락된 부분을 나타냅니다.
Custom IPackageReader 호출되지 않고 있습니다. 사용자 지정 리더를 받는 생성자 오버로드가 사용되는지 확인하십시오. 모든 Workbook 생성자 오버로드가 사용자 지정 패키지 리더를 허용합니다.
자주 묻는 질문
IPackageReader 또는 IPackageWriter를 언제 구현해야 합니까?
스토리지 백엔드가 로컬 파일 시스템이 아닌 경우에만 — 예를 들어, 임시 파일을 만들지 않고 클라우드 스토리지 스트림에서 직접 로드하는 경우.
PackageModel의 지원되지 않는 부분이 저장 시 보존됩니까?
UnsupportedParts의 비표준 부분은 다시 기록된다고 보장되지 않습니다. 비표준 부분의 라운드트립 정확성을 위해 저장된 XLSX를 ZIP 수준에서 후처리하십시오.
PackageStructureException와 WorkbookLoadException의 차이점은 무엇입니까?
PackageStructureException은(는) OPC/ZIP 레벨 실패( missing content type, broken relationship ). WorkbookLoadException은(는) XLSX XML 콘텐츠를 구문 분석할 때 발생하는 상위 레벨 실패입니다.