Cum să lucrați cu OOXML Packaging în .NET
Un fișier XLSX este o arhivă ZIP Open Packaging Convention (OPC). Aspose.Cells FOSS pentru .NET expune structura de bază a pachetului prin intermediul unui sistem. PackageModel, PackagePartDescriptor, IPackageReader, și IPackageWriter.Acestea sunt API-uri la nivel de infrastructură, utile în primul rând pentru implementări diagnostice și de stocare personalizate. Instalați cu dotnet add package Aspose.Cells_FOSS.
Ghid pas cu pas
Pasul 1: Instalați pachetul
dotnet add package Aspose.Cells_FOSSPasul 2: Importarea spațiului de nume
using Aspose.Cells_FOSS;Pasul 3: Gestionarea excepției de structură a pachetului
PackageStructureException este aruncat atunci când pachetul XLSX are o structură OPC nevalidă (de exemplu, lipsește relațiile necesare). Prinde-l alături de WorkbookLoadException atunci când încărcați fișiere din surse neconfidențiale.
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);
}Pasul 4: Înțelegeți IPackageReader și IPacchegeautor
IPackageReader definește o Read() metoda de citire a unui pachet OPC; IPackageWriter definește o Write() metodă de scriere a unei aplicații. Biblioteca oferă implementări implicite cu suport ZIP. Implementările personalizate pot fi furnizate atunci când se încărcă din sau sunt salvate în stocare non-filesystem (de exemplu, blobs cloud sau bufere in-memorie).
// 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)");Pasul 5: Verificați părțile neînsoțite
Când încărcați un fișier XLSX, PackageModel.UnsupportedParts Acestea sunt păstrate, dar nu interpretate. Access PackageLoadContext în timpul unui flux de sarcină personalizat pentru a inspecta modelul.
// 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.");Probleme comune şi soluţii
PackageStructureException este aruncat chiar cu TryRepairPackage = true. Unele defecțiuni structurale ale OPC nu pot fi reparate automat (de exemplu, lipsește complet harta de tip conținut). Verificați dacă fișierul este un ZIP valabil cu unzip -t file.xlsx. Dacă este valabil, poate fi criptat Fișierele protejate prin parolă nu sunt suportate.
Workbook Sunt încărcate, dar lipseşte ceva conţinut. Verifică. LoadDiagnostics.Issues pentru: DataLossRisk = true Acestea indică părţi care au căzut în timpul reparaţiei.
Cauze de taxe IPackageReader Nu este chemat. Asigură-te că constructorul de supraîncărcare care acceptă cititor personalizat este utilizată. Nu toate Workbook constructorul de supraîncărcare acceptă un cititor personalizat al pachetelor.
Întrebări frecvente
Când ar trebui să implement IPackageReader sau IPacchageWriter?
Numai atunci când backend-ul de stocare nu este sistemul local de fișiere de exemplu, încărcarea directă dintr-un flux de depozitare în cloud fără a crea un fișier temporar.
Sunt păstrate pe salvare părțile nesuportate din PackageModel?
Piese nestandard în UnsupportedParts Pentru fidelitatea de întoarcere a pieselor nestandard, procesarea ulterioară XLSX salvate la nivelul ZIP.
Care este diferența dintre PackageStructureException și WorkbookLoadExcept?
PackageStructureException este o eroare la nivelul OPC/ZIP (tip de conținut lipsă, relație ruptă). WorkbookLoadException este o eroare de nivel superior în analizarea conținutului XML XLSX.